构建响应

您的应用在处理完来自 Google 的出价请求后,必须构建 并发送响应本指南介绍了如何编写应用代码以构建 响应。

创建协议缓冲区 BidResponse 消息

Authorized Buyers 将 BidRequest 作为 HTTP POST。如果您的出价端点配置为使用 protobuf 格式,您的应用必须发送一个响应,其中 Content-Type 标头设置为 application/octet-stream,并且消息正文由序列化的协议缓冲区组成。协议缓冲区是 openrtb.proto 中定义的 BidResponse 消息。您的应用必须返回一个可解析对象 BidResponse,响应每个BidRequest。超时次数 和无法解析的响应会被视为错误,Google 会限制 错误率较高的出价方。

如果您不想对某个展示机会出价,可以将 BidResponse.ext.processing_time_ms 字段,保留所有 其他字段留空。您可以从以下位置获取 openrtb.proto参考数据页面。

广告素材 ID

您的 BidResponse 通过 BidResponse.seatbid.bid.crid 字段(限制为 64 字节)指定广告素材。即使是类似的广告素材,如果在任何显著特征(包括但不限于尺寸、声明的网址、广告素材属性和供应商类型)方面存在差异,也必须为此字段提供不同的值。换言之,您必须提供不同的 广告素材 ID 与符合以下条件的任意两个广告相关联:

  • 外观或行为方式有所不同。
  • 渲染到不同的图片。
  • 以不同的方式呈现(例如,一个广告由图片组成,另一个广告则是视频)。

在设计应用时,您应确定一种系统的标识符生成方法,该方法应适用于您计划提交的广告素材类型。

广告属性

Google 建议您声明广告素材属性,以便使用 BidResponse.seatbid.bid.apisBidResponse.seatbid.bid.attr 的组合或 BidResponse.seatbid.bid.ext.attribute 扩展来描述广告的特性和定位条件。以下内容介绍了如何声明属性:

  • VPAID
    BidResponse.seatbid.bid.apis 设置为 VPAID_1, 或 VPAID_2。对于 JSON 格式,可以将其设置为 12
  • MRAID
    BidResponse.seatbid.bid.apis 设置为 MRAID_1,或将其设置为 3(对于 JSON 格式)。
  • SIZELESS
    BidResponse.seatbid.bid.attr设为 RESPONSIVE,或 18(对于 JSON) 格式。
  • PLAYABLE
    这通过将 BidResponse.seatbid.bid.attr 设置为 USER_INTERACTIVE13(对于 JSON 格式)来指明。

如需了解如何获取有关广告素材检测到的属性的反馈,请参阅 Creatives 资源

公开出价字段

参与公开出价的广告交易平台和广告联盟出价方发送的出价响应与参与标准实时出价的 Authorized Buyers 买方发送的出价响应类似。公开出价客户可以指定少量 一些现有字段可能有其他用途。其中包括:

OpenRTB Authorized Buyers 详细信息
BidResponse.imp[].pmp.deals[].id BidResponse.ad[].adslot[].exchange_deal_id

与此交易相关联的广告交易平台命名空间中的交易 ID 出价并报告给发布商

BidResponse.seatbid[].bid[].ext.exchange_deal_type BidResponse.ad[].adslot[].exchange_deal_type

向发布商报告的交易类型,会影响交易在竞价中的处理方式。

BidResponse.seatbid[].bid[].ext.third_party_buyer_token BidResponse.ad[].adslot[].third_party_buyer_token 如果作为公开出价方参与竞价的广告交易平台充当中介,则此令牌用于识别最终第三方买方信息。此 ID 从 第三方买方,且必须在出价中原封不动地传递给 Google 响应。

建议

  • 启用持久 HTTPS 连接(也称为“保持连接”或 “连接重用”)。将超时时间设置为 10 秒, 最小值 - 在许多情况下,较高的值会有益。Google 验证 需要在应用的初始延迟时间测试期间执行此操作,因为 Authorized Buyers 以高速率发送请求,需要避免 为每个应用单独建立 TCP 连接而产生的延迟时间开销 请求。
  • 添加可选展示跟踪网址,以便在 而不是在出价工具胜出时得到展示。由于胜出和呈现之间存在流失,因此这样可以获得更准确的跟踪统计信息。

  • 让您的出价工具代码不依赖于已弃用字段, 这可能会导致您的出价因出错而失败。
  • BidResponse 中添加 BidResponse.seatbid.bid.wBidResponse.seatbid.bid.h。针对包含多个广告尺寸的请求的 BidResponse 必须包含这些字段,否则将从竞价中移除。
  • 将响应大小限制在 8 KB 以下。非常大的回答可能会增加 网络延迟并导致超时。
  • 请遵循针对需要 SKAdNetwork 归因的 iOS 广告资源出价的准则

出价响应示例

以下示例展示了 Protobuf 和 JSON 请求的人类可读示例。

OpenRTB Protobuf

OpenRTB JSON

Google

重要提示:示例中所述的 Protobuf 消息在此处以人类可读的文本表示。然而,这并不是 这些消息通过网络发送使用 Google 或 OpenRTB 协议缓冲区时 格式,系统就只会接受序列化的 BidResponse 消息。

您可以使用以下 C++ 代码创建和序列化 BidResponse 消息:

BidResponse bid_response;
// fill in bid response with bid information
string post_response;
if (bid_response.SerializeToString(&post_response)) {
  // respond to the POST with post_response as the content
} else {
  // return an error to the POST
}

指定广告素材

您的出价响应会指定在出价胜出后要投放的广告素材。您的出价必须包含一种受支持的广告格式(AMP、视频、原生)。在本课中, 我们使用 html_snippet 字段指定广告素材。

或者,您也可以根据广告格式,使用以下一个字段指定广告素材:

  • SDK 呈现的广告 <ph type="x-smartling-placeholder">
      </ph>
    • BidResponse.seatbid.bid.ext.sdk_rendered_ad
  • AMP
    • BidResponse.seatbid.bid.amp_ad_url
  • 视频
    • BidResponse.seatbid.bid.adm
  • 原生广告
    • BidResponse.seatbid.bid.adm_native

使用 BidResponse.seatbid.bid.adm 字段中的值。代码段包含在 在网页上插入 iFrame,以便系统检索广告 在页面加载时呈现。您必须精心制作 HTML 代码段,以便广告(横幅广告或插页式广告)在 iFrame 中正确呈现,并且尺寸与您要出价的广告位相称。

此外,出价响应中声明的广告尺寸必须与一个尺寸完全匹配 下列哪种尺寸组合?

  • 广告是常规横幅广告(而非视频广告、原生广告或插页式广告)。
  • 出价方已在出价响应中声明了该尺寸。每当请求中存在多个尺寸时,都必须声明尺寸。
  • 插页式广告属于例外情况。对于插页式广告,宽度 必须至少为屏幕宽度的 50%,且高度必须至少为屏幕的 40% 屏幕高度

您可以指定 HTML 代码段广告素材,方法是使用 但要注意指定 crid字段(在 Create BidResponse message 部分。 此功能的一个用途是将额外的信息添加到 作为呈现广告的一部分从您的服务器中提取。这样,您就可以通过 有关展示的任意数据传回您自己的服务器。

出价响应中返回的 HTML 代码段的大多数政策都与 。请参阅 Authorized Buyers 计划指南对第三方的要求 广告投放声明 广告的点击后到达网址

指定宏

宏是嵌入到某些出价响应字段中的格式化文本,这些字段包含网址,这些网址会在广告投放时替换为相关值。例如: 如果胜出的出价的 HTML 中包含 AUCTION_PRICE 宏,则会发生此错误 代码段广告素材,该宏将被替换为 值,以确定您为每次展示机会支付的金额 与竞价相关的费用。

您可以在以下字段中添加宏:

  • BidResponse.seatbid.bid.adm

    HTML 代码段、原生广告、视频网址和视频 VAST 均支持宏 XML 格式。

  • BidResponse.seatbid.bid.adm_native.eventtrackers.url

  • BidResponse.seatbid.bid.adm_native.imptrackers

  • BidResponse.seatbid.bid.ext.amp_ad_url

    只有 Google 专用的 WINNING_PRICE 和 AMP 广告素材支持 WINNING_PRICE_ESC 宏。

  • BidResponse.seatbid.bid.burl

  • BidResponse.seatbid.bid.ext.impression_tracking_url

    在以下情况下,请使用此字符串而不是 BidResponse.seatbid.bid.burl 需要多个结算网址。

例如,您可以在 HTML 代码段中加入宏,方法是 将 ${MACRO} 嵌入用于提取广告素材的网址内, 其中 MACRO 是受支持的宏之一,具体请参阅 OpenRTB 规范

Google RTB 宏

除了 OpenRTB 中的宏之外,Google 还支持其他宏 规范它们的格式有所不同,并显示为 如果嵌入到网址中,则为 %%MACRO%%。下表介绍了 这些宏:

说明
ADVERTISING_IDENTIFIER 允许买方在 Google Cloud 上接收 iOS IDFA 或 Android 广告 ID 展示呈现。 如需了解详情,请参阅解密广告主标识符
CACHEBUSTER 一个无符号的四字节随机整数字符串表示。
CLICK_URL_UNESC

广告的不转义点击后到达网址。在代码段中,第三方点击跟踪网址的转义版本应直接跟在宏后面。

例如,如果第三方点击跟踪网址为 http://my.adserver.com/some/path/handleclick?click=clk,则可以在宏调用后将以下代码与第三方点击跟踪网址的单重转义版本搭配使用:

<a href="%%CLICK_URL_UNESC%%http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>

在投放广告时,上述代码将会扩展为:

<a href="http://google-click-url?...&ad_url=http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>

该网址会先向 Google 注册该点击,然后再重定向 第三方点击跟踪网址。

CLICK_URL_ESC

广告的转义点击跟踪网址。如果您需要先将值传递到另一个随后会返回重定向的服务器,请使用此宏而非 CLICK_URL_UNESC

例如,可以在 HTML 代码段中使用以下代码:

<a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%"></a>

在广告投放时,此字段会展开为:

<a href="http://my.adserver.com/click?google_click_url=http://google-click- url%3F...%26ad_url%3D"></a>

这会向 my.adserver.com 注册点击,然后 my.adserver.com 将负责重定向到 google_click_url 参数中传递的网址。这假定 my.adserver.com 会对 google_click_url 参数进行转义。

您可以将一个两次转义网址附加到 %%CLICK_URL_ESC%%。取消转义后 my.adserver.com,这会留下 附加到 google_click_url 的网址。提取 google_click_url 后,它会再次转义,然后重定向。

CLICK_URL_ESC_ESC

广告的两次转义网址。如果您需要先将值传递到另一个随后会返回重定向的服务器,请使用此宏而非 CLICK_URL_UNESC

例如,可以在 HTML 代码段中使用以下代码:

<a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC_ESC%%"></a>

在投放广告时,上述代码将会扩展为:

<a href="http://my.otheradserver.com/click?google_click_url=http%3A%2F%2Fmy.adserver.com%2Fclick%3Fgoogle_click_url%3Dhttp%3A%2F%2Fgoogle-click-%20url%253F...%2526ad_url%253D"></a>
SCHEME 如果出价请求不需要 SSL,则扩展为 http:;如果出价请求需要 SSL,则扩展为 https:
SITE 内容网址的域名,经过了网址转义;对于匿名广告资源,则为匿名 ID。
SITE_URL 已弃用。已被提供相同功能的 SITE 宏替换。
TZ_OFFSET 时区偏移量。
VERIFICATION

在生产环境中和在验证流水线中扫描广告素材时,值不同。格式为: %%?VERIFICATION:true-val:false-val%%,其中任何值 但宏可用于 true-valfalse-val,包括空字符串。对于公开出价,我们建议广告交易平台使用此宏;广告交易平台使用此宏后,需求方平台无需进行任何更改。

例如,如果广告素材包含 %%?VERIFICATION:-1:5000%%,然后进行文本替换 会5000投放,-1 验证流水线。这有助于区分这两组 ping。

WINNING_PRICE

编码格式的展示费用(即 CPI,而不是每千次展示费用),以账号币种的百万分之一表示。例如,胜出的每千次展示费用为 5 美元 相当于 5,000,000 微单位的每千次展示费用,或 5,000 个微单位的每次安装费用。在这种情况下,WINNING_PRICE 的解码值将为 5,000。胜出价格是以 CPI 指定的。

要解析此宏,您需要实现一个 解密价格确认。如需了解详情,请参阅解密价格确认页面。

WINNING_PRICE_ESC 经过网址转义的 WINNING_PRICE

Google 要求您在第三方投放的广告的广告素材中使用 CLICK_URL_UNESCCLICK_URL_ESC 宏。Google 使用 CLICK_URL 宏进行点击跟踪。

宏中的网址转义使用以下架构:

  • 系统会用加号 (+) 代替空格字符。
  • 字母数字字符(0-9、a-z、A-Z)和 !()*、-./:_~ 集中的字符会保持不变。
  • 所有其他字符都会替换为 %XX,其中 XX 为十六进制字符 代表字符的数字。

发布商限制和要求

出价请求包含有关发布商在竞价中对广告素材施加的限制和要求的类型的信息。

  • BidRequest.bcat
    • 您可以将此字段指定的屏蔽类别与使用实时出价 API 的 detectedCategories 字段为您提交的广告素材检测到的类别进行比较。
  • BidRequest.imp.ext.allowed_vendor_type
  • BidRequest.imp.secure
    • 在实践中,此值始终会设为 true,因为 Google 要求所有广告素材都支持 SSL。
  • BidRequest.imp.{audio/banner/native/video}
  • BidRequest.imp.{audio/banner/native/video}.api
  • BidRequest.imp.{audio/banner/native/video}.battr
  • BidRequest.imp.{audio/banner/video}.mimes

切勿针对包含受限功能的广告出价。对于允许的功能(例如供应商类型),仅当广告的供应商类型在 BidRequest 中的 allowed_vendor_type 列表中时,才返回相应广告。仅限广告 通过填充 BidRequest.imp.banner应包含在您的出价中。如需了解详情,请参阅 BidRequest 协议缓冲区定义中对这些字段的注释。

如果在 BidResponse 中返回广告,您需要 准确设置BidResponse.seatbid.bid.attrBidResponse.seatbid.bid.cat,以及 BidResponse.seatbid.bid.adomainBidResponse.seatbid.bid.adm_native.link.url字段 BidResponse。如果一个广告针对这些值有多个适用的值 字段,则必须包含所有值。如需了解详情,请参阅 BidResponse 协议缓冲区定义中对这些字段的注释。系统会舍弃未设置这些字段的响应。

Open Measurement

借助 Open Measurement,您可以指定为投放到移动应用环境的广告提供独立衡量和验证服务的第三方供应商。

支持的广告格式包括视频广告、横幅广告和插页式广告。如需详细了解如何在包含这些格式的出价响应中使用 Open Measurement,请参阅 Open Measurement SDK 帮助中心文章。

出价响应示例

以下部分显示了不同广告类型的出价响应示例。

应用横幅广告

OpenRTB Protobuf

OpenRTB JSON

Google

应用插页式广告

OpenRTB 协议缓冲区

OpenRTB JSON

Google

应用插页式视频广告

OpenRTB 协议缓冲区

Google

应用原生

OpenRTB 协议缓冲区

OpenRTB JSON

Google

网络视频

Google

面向广告交易平台出价方的移动网站横幅广告

OpenRTB Protobuf