Skip to content

SSP DSP 竞价对接指南 ​

本文说明 DSP 如何接收 SSP 的实时竞价请求、返回广告,以及处理监测和成交价。适用于已完成 DSP 账号、广告主和素材审核的接入方。

1. 对接概览 ​

一次竞价分四步:

  1. SSP 用 POST 把 BidRequest 发给 DSP 的 bid_url。
  2. DSP 有出价时返回 HTTP 200 和 BidResponse;无出价返回 HTTP 204。
  3. SSP 校验价格和素材,胜出后把广告交回媒体。
  4. 曝光、点击发生时,SSP 先记自己的监测,再回调 DSP 的监测地址,并替换成交价宏。

SSP 会并发请求所有通过流量过滤的 DSP。超时、5xx、响应解析失败都算本次无效出价。

2. 广告形态 ​

广告形态看请求里实际带了哪个对象:

请求对象广告形态
imp.banner页面广告:信息流、开机图、猜你喜欢、视频关联位、焦点图、巨幕
imp.video框内广告:贴片、暂停、通用浮层、触点
imp.native原生广告

广告位、行业和模板的取值见对接时提供的字典,接口本身不硬编码。

3. DSP 需要提供什么 ​

接入前向 SSP 提供三项:

项目要求
竞价地址 bid_url公网可访问,例如 https://dsp.example.com/bid,支持长连接
获胜通知地址用于曝光回调,建议和 bid.adm.win_notice_url 使用同一套
最大 QPSDSP 能稳定承受的每秒请求数,超出会被丢弃

请求约定:

  • 方法 POST,请求头 Content-Type: application/x-protobuf。
  • 请求体是 BidRequest 的 Protobuf 二进制,不是 JSON。
  • 响应时间按平均低于 120ms 准备。SSP 下发的超时更短时,以 SSP 的超时为准。
  • 开启 gzip 时,请求体为压缩后的 Protobuf,带 Content-Encoding: gzip 和 Accept-Encoding: gzip;响应也可以用 Content-Encoding: gzip 返回。

4. 竞价请求 ​

4.1 BidRequest ​

字段类型说明
idstring本次请求的唯一标识,原样回传到响应 id
userUser用户信息
siteSite站点、包名和内容
deviceDevice设备信息
impImpression,可重复广告位曝光机会,一次请求可有多个
source_idint32流量来源,取值为 3
m_idstring合作方 ID

4.2 Impression ​

字段类型说明
idstring本次曝光机会的标识。响应 bid.impid 必须回传它
bannerBanner页面广告。和 video、native 三选一出现
videoVideo贴片、暂停、浮层等框内广告
nativeNative原生广告
bidfloorint32CPM 底价,单位分。出价应不低于它
is_pmpbool仅 PD 流量下发,true 表示 PD
pmpPmp仅 PD 流量下发,里面是订单
extended_ads_positionint32是否支持 5 秒广告。0 不支持,1 正一,2 倒一,3 都支持
impression_dateint32开机屏预加载的预计曝光日期。有此字段是预加载,一般提前 1 到 3 天;没有则是实时请求
info_stream_max_bids_allowedint32信息流单次允许返回的广告数。大于 1 时可以返回多个

floor_price 按行业分底价,当前不下发,底价以 bidfloor 为准。

4.3 Video 与 Banner ​

框内广告看 video:

字段类型说明
ad_zone_idstring广告位 ID,取值见广告位字典
linearityint321 串行在正片中,2 不是
ad_typeint32广告类型,见第 9 节
minduration / maxdurationint32素材时长范围,单位秒。返回的素材不能超出
protocolint32协议版本号
startdelayint32广告从第几秒开始
is_entire_rollbool是否为完整流量
video_startdelayint32播放进度,单位秒

页面广告看 banner:

字段类型说明
ad_zone_idstring广告位 ID
ad_typeint32广告类型,见第 9 节
creative_templateint64,可重复当前可投放的创意模板,含快速审核模板

4.4 用户、站点与内容 ​

user:

字段类型说明
idstring用户 ID。网页端取 cookie;iOS 取 idfa、openudid、mac;Android 取 imei、android id、mac;电视取 mac
is_privacy_protectedbool为真时该用户的隐私应被保护,不要用其标识做定向

site:

字段类型说明
idint32站点 ID
app_bundle_idstring应用包名
contentContent网站或视频内容

content:

字段类型说明
titlestring标题
urlstring网址
keywordstring,可重复关键字
lenint32视频时长
album_idint64剧目
channel_idint64频道 ID,原样转发
tagstring,可重复场景广告(通用浮层、创可贴)的识别标签
video_tagint64,可重复视频定向标签
video_clip_idstring本次请求的点位,场景广告专用

4.5 Device ​

字段类型说明
uastringUser-Agent。App 流量不传
ip / ipv6string设备 IP,使用广协 IP 库
geoGeo地域。country、metro(省)、city 都是广协地域编码
connection_typeint32网络,见第 9 节
platform_idint32平台,见第 9 节
os / os_versionstring操作系统及版本,如 android、6.0.1
modelstring机型,如 iPhone 15.1
manufacturerstring厂商,如 huawei、xiaomi
app_versionstringApp 版本
screen_width / screen_heightint32屏幕分辨率,单位像素
carrier_namestring运营商,UTF-8

设备标识按系统不同:

字段适用取值
idfaiOS原值
idfviOS原值
openudidiOS原值
caid_infoiOS广协 CAID。内含多个版本,每项有 version 和 caid
imeiAndroidMD5 后的值
android_idAndroid原值
oaidAndroid原值。Android Q 及以上取不到时为空
mac通用去掉冒号后 MD5

iOS 还可能带 local_timezone、os_update_time、startup_time(微秒时间戳)、cpu_num、disk_total、mem_total,以及 auth_status:-1 无法获取,0 未弹窗,1 受限,2 拒绝,3 已授权。

这些标识只用于当次已授权的实时决策,不要落成未脱敏日志,也不要用于接口约定以外的用途。

4.6 PD 流量 ​

imp.is_pmp 为真时才是 PD,此时读 imp.pmp.deals:

字段类型说明
deals.idstring订单 ID
deals.bidfloorint32该订单的底价,单位分。PD 以这个值为准,不用 imp.bidfloor

不是 PD 的请求不要去读 pmp。

5. 竞价响应 ​

有出价返回 HTTP 200,无出价返回 HTTP 204。除这两种以外的状态码都视为异常。不要用 200 返回空的或解析不了的内容。

返回的素材必须和请求匹配:时长不能超过 imp 的限制,类型要对应,不能用离线素材。

5.1 BidResponse、Seatbid、Bid ​

字段必填说明
id是与请求 id 相同,用来关联请求
seatbid是至少一个。每个里可以有多个 bid
bid.id是DSP 生成的竞价 ID,用于日志
bid.impid是对应请求里的 imp.id,必须一致
bid.price是出价,单位分/CPM
bid.adm是物料、监测和落地页
bid.startdelay否贴片的播放时间。想要更多曝光机会就不要填
bid.deeplink_url条件原生唤醒时必填
bid.universal_link_url条件iOS universal link 唤醒时必填
bid.mini_app_name条件微信小程序原始 ID,小程序唤醒时必填
bid.mini_app_path条件微信小程序页面路径,小程序唤醒时必填
bid.creative_content条件快速审核模板的内容,JSON 字符串
bid.creative_adi条件下载类六要素,JSON,见 5.5

5.2 Adm ​

字段必填说明
win_notice_url是DSP 曝光监测。可带成交价宏,长度不超过 1200。SSP 用它判断本次是否出价
ck_monitior_url是DSP 点击监测,长度不超过 1200。字段名就是这个拼写
adid是DSP 侧创意 ID,必须已完成到媒体素材的映射
click_throughs是落地页,见 5.3
pmo否第三方曝光监测,不能带价格宏。最多 3 条,多出的不会被请求
cmo否第三方点击监测,不能带价格宏。最多 3 条
native_title / native_desc否广告标题和描述
duration条件视频广告的播放时长,视频类必填
tracking_events否播放、下载等节点监测,见 5.4
icon否DSP logo,25×25 的透明 PNG
cat否创意的内容类别

win_notice_url 和 ck_monitior_url 必须是公网可访问的地址。

5.3 落地页 ClickThroughs ​

字段必填说明
click_type是点击类型,见下方
url否落地页地址,以竞价返回的值为准

click_type 的取值:

值含义
0默认,打开网页
4App 下载
11App 直接下载,不弹窗
14原生唤醒,配合 deeplink_url
15iOS universal link 唤醒
67微信小程序

落地页不再从素材上传信息里取,统一用这里实时返回的地址。

5.4 播放与下载监测 ​

tracking_events 的每一项:

字段说明
event事件,取值见下表
percent播放进度,0.25、0.5、0.75、1
tracking_url该事件的监测地址
值事件适用范围
0播放到 25%只对贴片有效
1播放到 50%只对贴片有效
2播放到 75%只对贴片有效
3播放到 100%只对贴片有效
4开始下载Android,点击类型为直接下载时
5下载完成同上
6安装完成Android,广告下载的 App 安装完成后回传
9deeplink 跳转成功
10用户关闭广告如开屏点跳过

0 到 10 都支持。同一个事件可以加多条,只加需要的事件;没有任何监测需求时整段省略。

5.5 下载类六要素 ​

下载类广告必须在 bid.creative_adi 返回 JSON:

字段含义
name应用名称
version版本号
developer开发者名称
permission权限说明入口
privacy隐私说明入口
feature应用功能

六项都必填。

6. 什么算有效出价 ​

返回 200 只说明 SSP 收到了响应。成为候选还要同时满足:

  1. seatbid 和 bid 都非空,adm.adid、adm.win_notice_url 有值。
  2. DSP 广告位和当前媒体广告位的映射存在。
  3. 出价不低于媒体底价和 DSP 广告位底价;PD 流量用订单底价。
  4. 收益计算成功,包括返点、固定底价、浮动收益。
  5. adid 已配置到目标媒体素材的映射。
  6. 曝光监测地址可用。

任一不满足,本次出价被丢弃。素材 ID、底价和监测地址是最常见的原因。所有 DSP 都没有有效候选时,SSP 对媒体返回 204,这是正常的无填充,不是故障。

7. 监测与成交价 ​

7.1 监测怎么走 ​

DSP 只返回自己的原始监测地址。SSP 不把它们直接交给媒体,而是先生成自己的跟踪地址,再带上 DSP 的地址:

  • 曝光:https://trk.fireaipro.com/im?...
  • 点击:https://trk.fireaipro.com/ck?...
  • 胜出:https://ntc.fireaipro.com/win?...

地址上的 info 由 SSP 生成并做 Base64,里面是 DSP、素材、广告位、底价、出价和来源。DSP 不要自己构造 info,也不要依赖参数顺序。

竞价成功后由 SSP 服务端触发 DSP 的获胜通知。

7.2 成交价宏 ​

监测地址里用 ${SETTLEMENT} 表示成交价,单位是分。CPM 按每千次曝光计,CPC 按每次点击计。

替换后的值是一个 Settlement 消息:先 Protobuf 序列化,再用一套自定义 Base64 编码。

protobuf
message Settlement {
  optional uint32 version = 1;
  required bytes price = 2;   // AES 加密后的价格
  optional bytes auth = 3;
}

解密步骤:

  1. 用自定义 Base64 解码。字典是 A-Z a-z 0-9 _ -,填充字符是 ! 而不是 =。
  2. 按 Protobuf 解出 Settlement,取 price。
  3. 用分配给该 DSP 的密钥做 AES-256-ECB 解密,PKCS5 填充。密钥是 32 个字符,每个 DSP 一把,测试和正式不同,联调时单独提供。
  4. 去掉填充后就是价格明文,例如 123456.78。

第三方监测(pmo、cmo)不允许带这个宏。

8. 联调清单 ​

  • [ ] bid_url 从 SSP 所在网络能访问,支持 Protobuf 而不是 JSON。
  • [ ] 正确处理 gzip:压缩的请求能解开,需要时压缩响应。
  • [ ] 在超时内返回。按平均低于 120ms 准备,P95 建议控制在 10ms 以内。
  • [ ] 无出价返回 204,不返回解析不了的空 body。
  • [ ] 有出价时 id、impid、price、adm.adid、win_notice_url、ck_monitior_url 都在,且 impid 与请求一致。
  • [ ] 素材时长、类型和请求匹配,素材 ID 已提交映射。
  • [ ] 曝光和点击地址公网可访问,成交价宏能正确解密。

9. 枚举 ​

9.1 广告类型 ad_type ​

值类型值类型
0页面1前贴
2中贴3后贴
6暂停10通用浮层

9.2 网络 connection_type ​

值网络值网络
0未知1有线
2Wi-Fi32G
43G54G
65G

9.3 平台 platform_id ​

值平台值平台
11PC 网页12PC 客户端
13Mac 客户端21iPad H5(贴片可点)
22iPad 客户端23Android 平板
32iPhone 客户端33Android 手机
311Android 手机 H5312iPhone H5(贴片不可点)
5201电视(Android)

25、35 不支持 RTB。

9.4 广告类型 adtype ​

值类型值类型
1Banner2插屏
3开屏4Banner
5应用图标6激励视频
7原生

11. 参考 ​

  • 广告位、行业、频道和模板的取值见对接时提供的字典。