竞价响应
尺寸
竞价响应的最大尺寸为 4KB。
无竞价
要传送无竞价响应,请发送带有状态代码 204 的空响应。
竞价胜出/失败/计费通知
AppLovin RTB 会在请求的 nurl
、lurl
和 burl
字段中,分别调用请求方提供竞价胜出、失败和计费通知 URL。竞价完成后,AppLovin RTB 会调用胜出 URL,并将广告发送至设备。失败 URL 会在竞价过程中、相关广告未能正常加载或其他胜出广告加载后调用。当设备渲染广告——即视频广告开始播放或设备展示图像广告时,AppLovin RTB 则会调用计费 URL。
请求方可将宏嵌入上述通知 URL 规格中。在请求 URL 之前,AppLovin RTB 会用合适的值替换 URL 中的宏。请查看下方列表,了解请求方可以在此类 URL 中嵌入哪些宏:
这些宏均区分大小写,在说明宏时请全部用大写。请将这些宏包含在 ${…}
中 (例如${AUCTION_ID}
)。
宏 | 描述 |
---|---|
AUCTION_BID_ID | 来自 BidResponse.bidid 属性的竞价 ID。 |
AUCTION_ID | 来自 BidRequest.id 属性的竞价请求 ID。 |
AUCTION_LOSS | 竞价失败原因代码,请参阅 OpenRTB 2.5 规范第 5.25 条中的表格。仅随 lurl 发送。 |
AUCTION_MINIMUM_BID_TO_WIN | 排名第二高的出价。该信息会随 nurl 发送,但有时也会通过 lurl 发送。忽略 lurl 实例。如果只有一个竞价——即中标竞价,那么发送的值为 0 。 |
AUCTION_PRICE | 竞价结算价格。使用与竞价相同的货币和单位。最多可保留 6 位小数。 |
带有宏的胜出竞价 URL 示例
https://example.com/endpoint/auction=${AUCTION_ID}&price=${AUCTION_PRICE}
广告标记标准
DSP 竞价方必须在竞价响应中包含广告标记。AppLovin RTB 不支持在竞价胜出通知后返回广告标记。
您的广告标记必须符合 AppLovin 的 RTB 广告标记标准。AppLovin RTB 服务器会在收到竞价后立即检查广告标记是否合规,然后对广告标记进行以下合理性检查:
- 广告标记已正确转义。
- 除 VAST 广告外,广告标记均已经过 URL 编码。
- 广告标记的 HTML 为片段。
- 使用富媒体广告竞价时,请将节点内容置于
CDATA
结构中。XML 中的CDATA
不需要任何编码。但是,如果您在 JSON 上下文中传递 XML 文档,那么必须使用如下 JSON 语法和转义规则:- 所有双引号都转义为
\"
。 - 撇号不转义。
- XML 文档中的所有制表符和换行符已被移除。下方示例 VAST 广告标记 已进行格式化处理,以便于阅读。请勿在实际广告标记中发送额外的空白字符。
- 所有双引号都转义为
要验证广告标记片段及其 CDATA
是否为有效 JSON 内容,您可以将该片段发送至 JSONLint 在线验证工具。
所有素材均应通过 SDK 渲染,因此 SDK 竞价方无需传递广告标记。SDK 竞价方可以使用 admarkup
字段传递自定义数据,并进行配置,通过适配器在加载时将自定义数据返回至 SDK。
竞价响应组件
竞价响应由 3 个组件组成:
bidresponse
- 顶层对象。
seatbid
- 竞价方代表特定席位进行的一组竞价。
bid
- 以特定商业条款购买特定展示的要约。
竞价响应对象
属性 | 类型 | 描述 | 是否必需? |
---|---|---|---|
bidid | 字符串 | 竞价方生成的响应 ID,用于辅助记录/跟踪。 | 否 |
cur | 字符串 | 当前仅接受且默认为 "USD" 。 | 否 |
id | 字符串 | 该响应对应的竞价请求 ID (必须与 bidrequest.id 相同)。 | 是 |
nbr | 整数 | 未竞价的原因。请参阅 OpenRTB 规格 2.5 中第 5.24 条的列表了解更多详情。 | 推荐 |
seatbid | 对象数组 | seatbid 对象 数组。如果要进行竞价,则需要提供一个或多个该对象。 | 是 |
Seatbid 对象
属性 | 类型 | 描述 | 是否必需? |
---|---|---|---|
bid | 对象数组 | 竞价对象数组;如果要进行竞价,则需要提供一个或多个该对象。 | 是 |
seat | 字符串 | 该竞价所代表的竞价方席位 ID。竞价响应可能包含来自多个 “席位” 的竞价,或来自同一席位的多个竞价。必须为字母数字字符串,最长不超过 40 个字符,最好不少于 8 个字符。当前不支持。 | 否 |
竞价对象
属性 | 描述 | 是否必需? |
---|---|---|
adid (字符串) | 竞价胜出时投放的预加载广告 ID。 | 否 |
adm (字符串) | 在竞价胜出时传递广告标签的主要方式。如果两者都包含广告标记,那么优先采用该方法,而非胜出通知。可能包含替换宏。请参阅受支持的宏版块,了解更多信息。原生广告格式支持 adm_native 。 | 是 |
adomain (字符串数组) | 广告主域名数组。AppLovin RTB 仅使用数组中的第一个域名。广告主域名必须与广告主落地页的顶层域名相同,而不是完整落地页 URL。对于 App Store 落地页,adomain 必须与应用所有者的顶层域名相同,而不是完整的应用商店 URL。adomain 值不得包含 “http:// ”、“https:// ” 或任何 “/ ” (斜杠) 字符。示例:yourapp.com (不是 yourapp.com/something 或 https://yourapp.com )。 | 是 |
api (整数) | 请参阅 OpenRTB 规范 2.5 版本第 5.6 条中的表格了解详情。 | 否 |
apis (整数数组) | 该展示支持的 API 框架列表。可以是以下任一:
| |
attr (整数数组) | 适用时必要。素材属性,来自下表的值数组:
| 推荐 |
bundle (字符串) | 广告主的应用程序 iTunes ID 或 Android 包名。如果不是应用程序安装广告,请留白。请勿传递开发者的应用程序 bundle,否则 AppLovin RTB 将拒绝响应。示例:Android 端为 com.example.app ,iOS 端为 628677149 。 | ext.skadn 存在时为必需;所有场景均推荐 |
burl (字符串) | 当中标竞价变为可计费状态时,广告交易平台调用的计费通知 URL。针对展示和支出跟踪,DSP 必须使用 burl 。只有使用burl 进行跟踪时,AppLovin 才会调查差异。 | 是 |
cat (字符串数组) | 素材的 IAB 内容类别。请参阅 OpenRTB 规范 2.5 版本中第 5.1 条了解更多详情。 | 是 |
cid (字符串) | 帮助检查广告品质的 Campaign ID。以 iurl 为代表的素材组。 | 推荐 |
crid (字符串) | 一个 campaign 素材的唯一标识。即便同样的素材会出现在新的展示中,也请勿为相同的素材分配新的素材 ID。 | 是 |
dealid (字符串) | 如果该竞价适用广告资源包,则引用该出价请求中的 deal.id 。除非针对广告资源包进行竞价,否则请勿传递该属性。 | 是,针对广告资源包 |
ext (对象) | 特定竞价方的 OpenRTB 扩展的占位符。 | 否 |
ext.crtype (字符串) | 该字段描述您要投放的广告类型。有效值如下:
crtype ,AppLovin 可以为您硬编码 crtype 。为此,请联系您的 AppLovin 客户经理。也支持在 bid.crtype 中传递 crtype 。 | 推荐 |
ext.clicktrackers (字符串数组) | AppLovin 记录点击事件时要持续跟踪的 (第一方和第三方) 点击跟踪 URL。不适用于原生广告。 | 是,如果投放 HTML 广告 + SKAD (SKAdNetwork)。 |
ext.duration (整数) | 视频时长 (以秒计)。 | 是,针对 CTV 库存。 |
ext.imptrackers (字符串数组) | 针对第三方跟踪需求的展示跟踪 URL。不适用于原生广告。请参阅原生对象 eventtrackers 。 | 否 |
ext.skadn (对象) | 支持 Apple SKAdNetwork 归因 API 所需的参数,通过 loadProduct() 。 | 否 |
ext.skadn.campaign (字符串) | Campaign ID (2.0–3.0) 或 Source ID (4.0+)。针对 SKAdNetwork 2.0–3.0 版本,应当为 1 - 100 之间的整数;对于 4.0 及以上版本,应当为 0 - 9999 之间以字符串表示的整数。 | 如果 ext.skadn 存在。 |
ext.skadn.fidelities[] (对象数组) | 支持 SKAdNetwork v2.2 引入的多种 fidelity-type。 | 如果 ext.skadn 存在。 |
….fidelities[«n»].fidelity (整数) | 要跟踪的归因 fidelity-type。 | 如果 ext.skadn 存在。 |
….fidelities[«n»].nonce (字符串) | 每个广告响应的唯一 ID。请参阅 Apple 文档,了解 UUID 正确格式要求。 | 如果 ext.skadn 存在。 |
….fidelities[«n»].signature (字符串) | Apple 指定的 SKAdNetwork 签名。 | 如果 ext.skadn 存在。 |
….fidelities[«n»].timestamp (字符串) | signature 节点使用的 Unix 时间 (以毫秒计) 字符串。 | 如果 ext.skadn 存在。 |
ext.skadn.itunesitem (字符串) | Apple App Store 中广告主应用的 ID。应与 BidResponse.seatbid.bid.bundle 相同。 | 如果 ext.skadn 存在。 |
ext.skadn.network (字符串) | 签名中使用的广告平台标识符。应与请求中 skadnetids 数组的条目之一相同。 | 如果 ext.skadn 存在。 |
ext.skadn.nonce (字符串) | 每个广告响应的唯一 ID。请参阅 Apple 文档,了解 UUID 正确格式要求。提示: SKAdNetwork v2.2 发布后,该字段已被弃用,改为支持多个 fidelity-type 的 ext.skadn.fidelities[«n»].nonce 。 | 如果 ext.skadn 存在。 |
ext.skadn.productpage (字符串) | 自定义产品页 ID。 | 否 |
ext.skadn.signature (字符串) | Apple 指定的 SKAdNetwork 签名。提示: SKAdNetwork 2.2 发布后,该字段已被弃用,改为支持多个 fidelity-type 的 ext.skadn.fidelities[«n»].signature 。 | 如果 ext.skadn 存在。 |
ext.skadn.skoverlay (对象) | 用于控制潜在 SKOverlay 的参数。SKOverlay 的触发条件 (带延迟;无延迟:0 ):视频开始播放,伴随广告渲染,或用户关闭叠加层、但广告保持打开状态。提示: 由于 Apple 不提供点击回传,因此 AppLovin 不会跟踪 SKOverlay 上的点击。 | 否 |
….skoverlay.position (整数) | 叠加层的位置。0 = 底部,1 = 底部向上 (bottomRaised)。默认为 0 。 | 否 |
….skoverlay.dismissable (整数) | 用户是否可以关闭叠加层。1 :叠加层可以关闭;0 :叠加层在屏幕上静态显示。默认为 1 。 | 否 |
….skoverlay.video_delay (整数) | 视频开始显示叠加层后的时间 (以秒计)。如果设置为 -1 ,那么就不会在视频开始时触发。 | 如果 ext.skadn.skoverlay 存在。 |
….skoverlay.companion_delay (整数) | 伴随广告渲染并显示叠加层后的时间 (以秒计)。如果设置为 -1 ,那么就不会在伴随广告渲染时触发。 | 如果 ext.skadn.skoverlay 存在。 |
….skoverlay.sk_dismiss_delay (整数) | 在 StoreKit 界面关闭后、延迟多少秒再显示叠加层 (以秒计)。设置为 -1 ,就不会在 StoreKit 关闭时触发。 | 如果 ext.skadn.skoverlay 存在。 |
ext.skadn.sourceapp (字符串) | Apple App Store 中开发者应用的 ID。应与 BidRequest.imp.ext.skad.sourceapp 相同。 | 如果 ext.skadn 存在。 |
ext.skadn.timestamp (字符串) | signature 节点使用的 Unix 时间 (以毫秒计) 字符串。提示: SKAdNetwork 2.2 发布后,该字段已被弃用,改为支持多个 fidelity-type 的 ext.skadn.fidelities[«n»].timestamp 。 | 如果 ext.skadn 存在。 |
ext.skadn.version (字符串) | 预期的 SKAdNetwork 版本,不得低于 2.0。 | 如果 ext.skadn 存在。 |
ext.vendor (字符串数组) | 监测所投放广告可见度的可见度代理商名称。只有在为某次展示收集了可见度监测时,您才应当在竞价响应中声明可见度代理商。针对 Integral Ad Science (IAS) 设为 "ias" ;针对 Moat 设为 "moat" 。在返回可见度相关的展示 campaign 时,买方必须在竞价响应中包含代理商名称。此项不适用于 Open Measurement 可见度。 | 针对监测可见度的 campaign |
h (整数) | 素材高度 (以密度无关像素计)。 | 推荐 |
id (字符串) | 竞价方生成的竞价 ID,用于辅助记录/跟踪。 | 是 |
impid (字符串) | 相关竞价请求中展示对象的 ID。 | 是 |
lurl (字符串) | 竞价失败通知 URL,由广告交易平台在已知竞价失败时调用。其中可能包含替换宏。请参阅受支持的宏版块了解详情。 | 否 |
nurl (字符串) | 竞价赢得展示机会时,广告交易平台调用的竞价胜出通知 URL。 | 推荐 |
price (浮点数) | 竞价价格以 CPM (每千次展示成本)表示,但实际交易仅用于单次展示。提示:虽然该字段类型指示浮点数,但在处理货币时,我们强烈建议您使用整数运算 (例如 Java 中的 BigDecimal )。 | 是 |
protocol (整数) | 标记的视频响应协议 (如适用)。请参阅 OpenRTB 规格 2.5 第 5.8 条中的表格了解详情。 | 否 |
w (整数) | 素材宽度 (以密度无关像素计)。 | 推荐 |
跟踪字段
请参阅下方表格,了解需求方平台可用的跟踪字段及其推荐用途。
bidresponse.bid. 跟踪器 | 方法 | 推荐用途 |
---|---|---|
.adm |
|
|
.adm.native.eventtrackers | 客户端触发 |
img 和 js 标签。详情请参阅Open RTB 1.2 原生广告规格第 7.7 条 “Event Tracking Methods Table” (事件跟踪方法表格) 中定义的 “方法”。native.imptrackers 和 native.jstracker 字段即将被 IAB 弃用,改为 eventtrackers ,因此我们建议 DSP 使用 native.eventtrackers 。 |
.adm.native.imptrackers | 客户端触发 (已弃用,改为 eventtrackers ) | 无效流量 (IVT) 跟踪 |
.adm.native.jstracker | 客户端触发 (已弃用,改为 eventtrackers ) | Open Measurement SDK (OMSDK) |
.adm.native.link.clicktrackers | 客户端触发 | 点击跟踪 (可选) |
.burl | 服务器端触发。X-Device-IP 和 X-Device-User-Agent 会在服务器端到服务器端的回传中以标头形式发送:
| 买方 (DSP) 展示和支出跟踪 |
.ext.imptrackers | 服务器端触发。X-Device-IP 和 X-Device-User-Agent 会在服务器端到服务器端的回传中以标头形式发送:
| 合作伙伴展示跟踪 |
竞价响应示例
{ "id": "5e1eb292d6b7ea9cf3da74ddb385996a62d3a6e9", "seatbid": [ { "bid": [ { "id": "8JxH4DHN4KMF21Vd", "impid": "1", "price": 15, "adid": "1093919", "adm": "<a href=\"https://click.url/click/8JxH4DHN4KMF21Vd?uid=05D02DC6-0132-4C2C-A879-79BB026BE3F8&partner=applovin&ts=2018-07-09T18-19-01Z&ad=1093919\"><img src=\"https://assets.dsp.io/ad_assets/files/320x50.png\" height=\"50\" width=\"320\" alt=\"\"/></a>", "adomain": [ "advertiser.com" ], "bundle": "123123123", "iurl": "https://assets.dsp.io/ad_assets/files/320x50.png", "cid": "12345", "crid": "crid123", "cat": [ "IAB22-2" ], "h": 50, "w": 320, "ext": { "crtype": "HTML", "imptrackers": [ "https://example.dsp.events/win/8JxH4DHN4KMF21Vd?ts=2018-07-09T18-19-01Z&ad=1093919&uid=05D02DC6-0132-4C2C-A879-79BB026BE3F8&auction=${AUCTION_ID}&price=${AUCTION_PRICE}&partner=applovin" ] } } ] } ], "bidid": "8JxH4DHN4KMF21Vd", "cur": "USD"}
原生广告响应示例
{ "bidid":"9aa2a2950894c95b9b02476a5ba5438dc6de8dc1", "cur":"USD", "id":"65de6af36e6fb32778afa94a996ec4c2b514145d", "seatbid":[ { "bid":[ { "adm":"{\"native\":{\"assets\":[{\"id\":100,\"title\":{\"text\":\"Test Ad\"}},{\"id\":200},{\"id\":300,\"img\":{\"h\":null,\"url\":\"https://assets.com/main_image.png_\",\"w\":null}},{\"id\":310,\"img\":{\"h\":80,\"url\":\"https://assets.com/icon_image.png\",\"w\":80}},{\"data\":{\"value\":\"Test Ad Subline\"},\"id\":420},{\"data\":{\"value\":\"Continue\"},\"id\":430},{\"data\":{\"value\":\"4.5\"},\"id\":410}],\"imptrackers\":[\"https://adserver.com/impression_tracker\"],\"link\":{\"url\":\"https://adserver.com/click_destination\"}}}\n", "adomain":[ "somegame.com" ], "bundle":"com.game.example", "cat":[ "IAB1" ], "crid":"74650.0!3ILDTypkALKe8xfw2WJLmxfNOftiOg2u3yeGIKEULAU*", "ext": { "crtype":"native" }, "id": "1", "impid": "1", "iurl": "https://assets.com/preview.png", "price": 1.0 } ], "seat":"A00000001" } ]}