当前位置: 首页 > news >正文

程序化广告行业(65/89):AdX/SSP系统深度剖析与实战要点

程序化广告行业(65/89):AdX/SSP系统深度剖析与实战要点

大家好!一直以来,我都对程序化广告领域充满热情,这个领域发展迅速且不断涌现新的技术和模式。之前我们探讨了程序化广告的一些基础内容,今天咱们继续深入学习AdX/SSP系统中广告位代码获取的更多形式、PDB订单设置、广告排期表以及DSP接入设置等关键知识,希望能和大家一起在这个领域不断进步,收获更多有价值的信息。

一、广告位代码获取的多样形式

在AdX/SSP系统中,广告位代码获取除了之前提到的Web页面广告位的JS和iframe形式,还有视频播放器广告位和App应用广告位这两种特殊类型。

视频播放器广告位用于PC或Mobile媒体内的视频播放器内,一般采用vast形式。它分为http协议和https协议,例如http://b-rk.biddingx.com/rk/bid?id=196&mrt=2 就是一种vast代码形式。这种代码形式确保广告能在视频播放过程中精准展示,比如常见的视频前贴片广告、暂停广告等,都是通过这种方式实现的。在实际开发中,我们可以使用Python的requests库来模拟获取视频播放器广告位代码:

import requests

def get_video_ad_slot_code():
    url = "http://example.com/video_ad_slot_code"
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    else:
        return "获取视频广告位代码失败"

print(get_video_ad_slot_code())

App应用广告位主要用于App应用内。接入方式是使用SDK代码包,并且根据不同的移动操作系统,分为iOS和Android两种SDK。由于市场上很多游戏App会使用Unity3D或Cocos2d游戏引擎,AdX/SSP若要接入这些游戏App,就需要相应的Unity3D、Cocos2d的SDK。开发者接入时,集成这些SDK后选择导出游戏到iOS或Android平台就行。下面用Java代码模拟在Android平台集成SDK的部分逻辑:

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 模拟初始化广告SDK
        boolean isSdkInitialized = initAdSdk();
        if (isSdkInitialized) {
            // SDK初始化成功,进行广告位加载等后续操作
            loadAdSlot();
        } else {
            // SDK初始化失败处理
            handleSdkInitializationError();
        }
    }

    private boolean initAdSdk() {
        // 实际初始化SDK的逻辑,这里简化返回true表示成功
        return true;
    }

    private void loadAdSlot() {
        // 加载广告位的逻辑
        System.out.println("广告位加载成功");
    }

    private void handleSdkInitializationError() {
        // 处理SDK初始化失败的逻辑
        System.out.println("广告SDK初始化失败");
    }
}

除了上述代码形式,还有API形式。由AdX/SSP平台提供API对接文档,媒体按照规范开发后双方联调;或者媒体提供API对接文档,AdX/SSP按规范开发。对接完成后,媒体掌握流量控制权,决定发送多少流量、何时发送以及投放什么素材等。假设我们使用Node.js来模拟媒体与AdX/SSP平台通过API对接发送流量的过程:

const http = require('http');

const server = http.createServer((req, res) => {
    if (req.url === '/sendTraffic' && req.method === 'POST') {
        // 模拟发送流量的逻辑
        console.log('媒体向AdX/SSP平台发送流量');
        res.statusCode = 200;
        res.end('流量发送成功');
    } else {
        res.statusCode = 404;
        res.end('请求未找到');
    }
});

const port = 3000;
server.listen(port, () => {
    console.log(`服务器运行在端口 ${port}`);
});

二、PDB订单设置要点解读

PDB订单设置包含多个重要参数。订单名称方便识别和管理不同的订单。投放平台选择决定了广告将在哪个平台上展示。价格根据预设条件、需求量等因素确定,计费方式常见的有CPM(每千次展示成本) 。需求量明确了总计和每日的展示次数需求。

退量比例在投放平台需要退量采购时设置,它影响着广告投放的成本和效果。订单有效期规定了广告投放的时间范围。选择合适的广告位至关重要,不同的广告位有不同的展示效果和受众群体。预设条件可以按时段、地区、频次、客户端、人群等维度进行预过滤,比如只选择特定时间段、特定地区的流量进行投放,这样可以让广告更精准地触达目标用户。预设条件设置得越精细,广告的精准度越高,但价格相对也会越高。

用Python类来模拟PDB订单设置:

class PDBOrder:
    def __init__(self, order_name,投放平台, 计费单价, 投放需求总计, 投放需求每日, 退量比例, 有效期, 广告位, 预设条件):
        self.order_name = order_name
        self.投放平台 = 投放平台
        self.计费单价 = 计费单价
        self.投放需求总计 = 投放需求总计
        self.投放需求每日 = 投放需求每日
        self.退量比例 = 退量比例
        self.有效期 = 有效期
        self.广告位 = 广告位
        self.预设条件 = 预设条件

# 实例化一个PDB订单对象
order = PDBOrder(
    order_name="example_order",
    投放平台="舜飞|BiddingX",
    计费单价=5.0,
    投放需求总计=1000,
    投放需求每日=100,
    退量比例=0.1,
    有效期="2023-01-01至2023-01-31",
    广告位="banner_ad_slot",
    预设条件={"时段": "08:00-22:00", "地区": "北京"}
)

print(f"订单名称: {order.order_name}")
print(f"投放平台: {order.投放平台}")
print(f"计费单价: {order.计费单价} 元/CPM")
print(f"投放需求总计: {order.投放需求总计} 千次展示")
print(f"投放需求每日: {order.投放需求每日} 千次展示")
print(f"退量比例: {order.退量比例}")
print(f"有效期: {order.有效期}")
print(f"广告位: {order.广告位}")
print(f"预设条件: {order.预设条件}")

三、广告排期表的重要作用

除了PDB和PD订单,大部分媒体有传统直销团队进行流量售卖。为了避免售卖过量导致无法提供足够流量给需求方,广告排期表就发挥了重要作用。它能帮助销售团队清晰了解每个广告位当前的售卖情况,通过不同的颜色标识已投放、投放中、已提期等状态,直观展示每个广告位在不同时间的流量使用情况。例如,从提供的广告排期表中可以看到不同广告位在2017 - 7月各时段的售卖比例,这样销售人员就能合理安排流量售卖计划,提高流量利用效率。

假设我们用JavaScript来生成一个简单的广告排期表数据结构:

const adSlotSchedule = {
    "adSlot1": {
        "2023-01-01": "已投放",
        "2023-01-02": "投放中",
        "2023-01-03": "已提期"
    },
    "adSlot2": {
        "2023-01-01": "未售卖",
        "2023-01-02": "未售卖",
        "2023-01-03": "投放中"
    }
};

function getAdSlotStatus(adSlot, date) {
    return adSlotSchedule[adSlot][date] || "未知状态";
}

console.log(getAdSlotStatus("adSlot1", "2023-01-01"));
console.log(getAdSlotStatus("adSlot2", "2023-01-03"));

四、DSP接入设置关键要素

(一)API验证信息

DSP接入AdX/SSP系统时,API验证信息是保障系统安全和稳定运行的关键。DSP需要提供DSP ID及对应的Token进行接入资格验证。同时,可以配置IP范围,只有在该范围内的IP才能调用AdX/SSP的API接口。这不仅能防止DSP ID和Token信息泄露后被他人盗用,还能避免AdX/SSP的API资源被恶意请求导致浪费。

(二)价格密钥设置

DSP和AdX/SSP约定好价格密钥,这是为了保护DSP的价格信息不被泄露。在广告投放过程中,价格信息涉及商业利益,通过设置价格密钥,可以确保只有双方认可的交互才能获取和传递价格信息,提高交易的安全性和保密性。

用Java代码模拟DSP接入设置中的API验证和价格密钥设置:

public class DSPAccessSettings {
    private String dspId;
    private String token;
    private String ipRange;
    private String priceKey;

    public DSPAccessSettings(String dspId, String token, String ipRange, String priceKey) {
        this.dspId = dspId;
        this.token = token;
        this.ipRange = ipRange;
        this.priceKey = priceKey;
    }

    // 省略getter和setter方法
}

public class Main {
    public static void main(String[] args) {
        DSPAccessSettings settings = new DSPAccessSettings(
            "dsp123",
            "token123456",
            "192.168.1.0/24",
            "price_key_abc"
        );

        System.out.println("DSP ID: " + settings.getDspId());
        System.out.println("Token: " + settings.getToken());
        System.out.println("IP范围: " + settings.getIpRange());
        System.out.println("价格密钥: " + settings.getPriceKey());
    }
}

今天为大家详细解读了AdX/SSP系统中的多个关键知识点,这些内容在程序化广告投放中起着至关重要的作用。希望大家通过这篇文章能对程序化广告有更深入的理解。

写作不易,如果这篇文章帮助你更好地了解了程序化广告行业,希望你能点赞、评论支持一下,也欢迎关注我的博客,后续我会持续分享更多相关知识,咱们一起在这个领域共同成长!

相关文章:

  • 《操作系统真象还原》第五章(3)——载入内核
  • JAVA学习-练习试用Java实现“实现一个Hadoop MapReduce任务,对大数据集中的数值进行排序和筛选”
  • 23种设计模式-行为型模式-中介者
  • 可以使用费曼学习法阅读重要的书籍
  • 【学Rust写CAD】34 精确 Alpha 混合函数(argb.rs补充方法)
  • 路由器的 WAN(广域网)口 和 LAN(局域网)口
  • 【微机及接口技术】- 第五章 输入输出与接口技术(下)
  • uniapp微信小程序引入vant组件库
  • docker部署rabbitmq
  • [刷题总结] 双指针 滑动窗口
  • 使用`sklearn`中的逻辑回归模型进行股票的情感分析,以及按日期统计积极和消极评论数量的功能
  • JavaScript箭头函数介绍(=>)(箭头函数不绑定自己的this,而是继承上下文的this;不能用于造函数)JavaScript =>
  • Linux网络应用层自定义协议与序列化
  • 导数的基本求导法则
  • 代码随想录算法训练营Day32| 完全背包问题(二维数组 滚动数组)、LeetCode 518 零钱兑换 II、377 组合总数 IV、爬楼梯(进阶)
  • 纠错:LLMs 并不是在预测下一个词
  • 【家政平台开发(21)】用户管理模块开发
  • 批量将 JSON 转换为 Excel/思维导入等其它格式
  • 人工智能起源:从图灵到ChatGPT
  • 4月6日随笔
  • 公司注册的公司/seo怎么发布外链
  • wordpress开发的网站/西安seo管理
  • 做网站需要学php吗/网站seo
  • 网站搭建 保定/百度问答
  • 坪山网站建设要多少钱/中囯联通腾迅
  • 做英文网站内容来源/网站推广的具体方案