构建响应

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

创建 BidResponse 消息

Authorized Buyers 将 BidRequest 作为 HTTP POST。您的应用发送的响应必须包含 Content-Type 标头设为 application/octet-stream 以及由序列化协议缓冲区组成的消息正文协议 缓冲区是 BidResponse 消息,如 realtime-bidding.proto。您的应用必须返回一个可解析对象 BidResponse,响应每个BidRequest。超时次数 和无法解析的响应会被视为错误,Google 会限制 错误率较高的出价工具。

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

广告素材 ID

您的BidResponse通过 buyer_creative_id 字段(上限为 64 字节)。即使是类似的广告素材 如果buyer_creative_id的值不同,则它们必须各不相同 任何显著的特征,包括但不限于:尺寸、声明的网址、 广告素材属性和供应商类型。换言之,您必须提供不同的 广告素材 ID 与符合以下条件的任意两个广告相关联:

  • 外观或行为方式有所不同。
  • 渲染为不同的图片。
  • 采用不同的呈现方式(例如,一个广告包含一张图片, 另一个包含 Flash)。

在设计应用时,您应确定 生成对您计划的广告素材类型有意义的标识符 提交。

广告属性

您必须声明能够完整描述广告的广告素材属性 BidResponse.Ad.attribute 中呈现的特征及其定位。通过 必须声明的属性(另请参阅 属性 buyer-declarable-creative-attributes.txt):

  • 7 Tagging: IsTagged
    广告包含像素标记(又称网络信标), 用于后续再营销的 Cookie ID 列表。
  • 8 Remarketing: IsRemarketing
    广告根据用户的 Cookie ID 或设备 ID 来定位他们,其中 一系列 Cookie ID 或设备 ID 代表一组 以前曾与买方拥有或代表的网站进行过互动。
  • 9 UserInterestTargeting: IsUserInterestTargeted
    广告根据用户的 Cookie ID 或设备 ID 来定位他们,其中 一系列 Cookie ID 或设备 ID 代表一组 一般兴趣群体。
  • 30 InstreamVastVideoType: Vpaid
    广告需要 VPAID 支持才能呈现。
  • 32 MraidType: MRAID
    广告需要使用 MRAID API 才能呈现。

此外,还支持以下属性,但其声明 不需要,因为 Authorized Buyers 会自动检测它们,并会屏蔽(或 允许)您的广告素材。 请参阅 广告素材 API ,了解有关如何获得有关在您的广告资源中检测到的属性的反馈 广告素材。

  • 34 RichMediaCapabilityType: RichMediaCapabilityFlash
    广告需要 Flash 支持才能呈现。
  • 50 RichMediaCapabilityType: RichMediaCapabilityNonFlash
    广告不需要 Flash 即可呈现。
  • 47 RichMediaCapabilityType: RichMediaCapabilitySSL
    广告可以在 SSL 网页上呈现。请注意,使用 Authorized Buyers 的买方 将此属性声明为不同的值(这些值将会被审核 且审批状态各不相同)。因此,如果您同时使用 SSL 和 非 SSL 版本的广告素材,那么您应相应地声明该属性, 以便在 AdX 中正确体现这一区别。

公开出价字段

参与公开竞价的广告交易平台和广告联盟出价方发送的出价响应 出价方式与参与标准计划的 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.Ad.width 和 您的BidResponse中的BidResponse.Ad.height。答 对包含多种广告尺寸的请求BidResponse 请添加 widthheight 值,否则 竞价失败
  • 将响应大小限制在 8K 以下。非常大的回答可能会增加 网络延迟并导致超时。
  • 遵循 需要 SKAdNetwork 归因的 iOS 广告资源的出价

出价响应示例

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

Google

OpenRTB JSON

OpenRTB 协议缓冲区

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

您可以使用BidResponse 以下 C++ 代码:

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.Ad.sdk_rendered_ad
  • AMP 网页 <ph type="x-smartling-placeholder">
      </ph>
    • BidResponse.Ad.amp_ad_url
  • 视频
    • BidResponse.Ad.video_url
    • BidResponse.Ad.video_vast_xml
  • 原生 <ph type="x-smartling-placeholder">
      </ph>
    • BidResponse.Ad.native_ad

使用 BidResponsehtml_snippet 字段。通过 代码段包含在插入到网页中的 iFrame 中,使广告 在网页加载时检索和呈现的。您必须编写 HTML 以便广告(横幅广告或插页式广告)在 且尺寸适合您要出价的广告位。

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

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

html_snippet 字段支持符合以下条件的任何有效 HTML 代码: 但要注意指定 Create BidResponse message(创建出价响应消息)部分中的 buyer_creative_id 字段。一个 将额外信息添加到 。这样,您就可以通过 有关展示的任意数据传回您自己的服务器。

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

指定宏

用于定义广告素材的 HTML 代码段可以包含一个或多个特殊的 称为宏的结构。在投放广告时,系统会将这些值替换为 宏。例如,您的客户端出价应用可以使用 WINNING_PRICE 宏来确定为广告支付的费用, 则会在竞价中胜出要解析此宏,您需要实施 用于解密价格确认的应用。请参阅解密价格 确认页面。

请按以下格式指定宏作为 HTML 代码段的一部分: %%MACRO%%,其中 MACRO 是受支持的一种 下表中列出的宏。

Google 要求您使用 CLICK_URL_UNESCCLICK_URL_ESC 宏。 。Google 使用 CLICK_URL 宏进行点击跟踪。

要使用宏,请将其包含在广告中,这样系统就会在发生 就会出现这种错误提取的返回值是指向另一个 您附加到 CLICK_URL 的网址。

说明
ADVERTISING_IDENTIFIER 允许买方在广告展示时接收 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 记录点击, 将负责重定向到在 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

宏中的网址转义使用以下方案:

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

发布商限制

发布商使用 BidRequest 传递有关哪些 它们所允许的范围。您必须强制执行以下字段中的限制:

  • allowed_vendor_type
  • excluded_attribute
  • excluded_sensitive_category

其中一个字段指定允许使用的广告功能,另一个指定 禁用这些功能。切勿返回包含禁用功能的广告。对于已允许 则仅当其供应商类型是 BidRequest 中的 allowed_vendor_type 列表。请参阅 BidRequest 协议缓冲区中这些字段的注释 定义。

如果在 BidResponse 中返回 HTML 代码段,则您将 准确设置 attributecategoryBidResponse 中的 click_through_url 字段。 如果广告的这些字段有多个适用的值,那么您必须 包含所有值。有关这些字段的注释,请参见 BidResponse 协议缓冲区定义。 未设置这些字段的响应将被舍弃。

BidRequest.excluded_attribute 可能的值包括 (请参阅 publisher-excludable-creative-attributes.txt):

  • 7 Tagging: IsTagged
    如果广告为了创建 Cookie ID。
  • 8 CookieTargeting: IsCookieTargeted
    如果广告是根据消费者的 Cookie ID 来定位的,则相应广告将不会展示,此处的 Cookie ID 列表表示 之前与买方拥有或代表的网站进行过互动的一组消费者。
  • 9 UserInterestTargeting: IsUserInterestTargeted
    如果广告是根据消费者的 Cookie ID 来定位的,则相应广告将不会展示,此处的 Cookie ID 列表表示 被买家划入共同兴趣群体的一组消费者。
  • 21 CreativeType: Html
    不得在广告中使用 html_snippetsnippet_template BidResponse.Ad 中的字段。
  • 22 CreativeType: VastVideo
    BidResponse.Ad 中不允许广告使用 video_url 字段。
  • 30 InstreamVastVideoType: Vpaid
    广告不得需要支持 VPAID 才能呈现。
  • 32 MraidType: MRAID
    不允许需要 MRAID API 才能呈现广告。
  • 34 RichMediaCapabilityType: RichMediaCapabilityFlash
    广告不得需要支持 Flash 才能呈现。
  • 39 RichMediaCapabilityType: RichMediaCapabilityHTML5
    广告不得需要 HTML5 功能才能呈现。
  • 48 RichMediaCapabilityType: RichMediaCapabilityNonSSL
    不允许广告发出非 SSL 请求。

因此,如果 excluded_attribute 字段包含值, 7,那么您不应返回使用像素标记(网络信标)的 创建列表请注意,如果广告进行此操作,则必须将 BidResponse 的属性字段。 同样,如果 excluded_attribute 字段包含值 48, 则只应返回可在 SSL 网页上呈现的广告 声明属性 47 RichMediaCapabilityType: RichMediaCapabilitySSL)。

也是excluded_sensitive_category BidRequest 使用的代码在 ad-sensitive-categories.txt 文件,请参阅参考数据页面。以下为扩展内容 其中一些代码的说明:

  • 3 Politics
    包括政治问题或争议性的社会问题;不包括整体来说不涉及任何党派观点的资讯组织的广告。
  • 4 Dating
    包括约会服务和在线约会社区。
  • 5 Religion
    包括宗教广告以及倡导或反对宗教观点的广告;不包括占星术或非宗派精神类。
  • 7 Video Games (Casual & Online)
    包括视频游戏、在线游戏和可下载的游戏;不包括视频游戏机。
  • 8 Ringtones & Downloadables
    铃声等手机内容以及其他可下载的内容,例如适用于台式机的屏保和壁纸以及适用于社交网络的个人资料布局和图片。
  • 10 Get Rich Quick
    承诺快速赚钱的方案。
  • 18 Weight Loss
    包括减肥、节食及相关产品和计划;不包含健康饮食或一般性健身广告。
  • 19 Cosmetic Procedures & Body Modification
    包括整容、吸脂、激光、脱毛、植发、文身和身体修形。
  • 23 Drugs & Supplements:
    包括医用药品、维生素、补充剂及相关零售商;不包括提供毒品相关信息的资源。
  • 24 Sexual & Reproductive Health
    包括性功能和生殖类广告;不包括常规怀孕资源。
  • 35 Social Casino Games
    包括没有机会赢得任何有价物品(例如现金或奖品)的模拟赌博游戏(包括但不限于:扑克、老虎机、宾果、彩票、体育博彩、比赛博彩以及其他牌类游戏和赌场游戏)。
  • 36 Significant Skin Exposure
    具有以下特点的广告图片:人体从胸骨到大腿中部的任何部位均无衣物覆盖;或者全身仅穿着内衣、泳装、女式内衣或其他透明衣物,或者穿着毛巾或床单等非衣物物品。
  • 37 Sensationalism
    旨在通过激起用户的好奇心(通常使用包含夸张语言或图像的宣传语)来吸引用户点击的广告。包括以耸人听闻为主题(如名人被捕、死亡或离婚)或旨在制造震惊效果的广告。

开放式衡量

借助 Open Measurement,您可以指定提供独立衡量和 验证服务。

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

出价响应示例

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

应用横幅广告

Google

OpenRTB JSON

OpenRTB 协议缓冲区

应用插页式广告

Google

OpenRTB JSON

OpenRTB 协议缓冲区

应用插页式视频广告

Google

OpenRTB 协议缓冲区

应用原生

Google

OpenRTB JSON

OpenRTB 协议缓冲区

网络视频

Google

广告交易平台出价工具的移动网站横幅广告

OpenRTB 协议缓冲区