买方 SDK 广告格式

买方 SDK 广告使用由您自己的 SDK 呈现的广告素材。

将您的出价适配器集成到其应用中的发布商的移动应用内广告资源可以接受使用买方 SDK 呈现的广告格式的出价。其呈现方式取决于您的 SDK 实现以及您在出价响应中提交的 SDKRenderedAd

您可以出价,其中包含买方 SDK 呈现的广告或 Google 移动广告 SDK 支持的任何其他广告格式,但包含这两者的任何出价都会被滤除。

要求

买方 SDK 广告可供已获批准的买方使用。这种格式需要您和发布商付出额外的努力。请与您的技术支持客户经理联系,以便为您的账号配置买方 SDK 广告。然后,您可以实现出价适配器,以便您的 SDK 与 Google 移动广告 SDK 通信。发布商需要将您的 SDK 和适配器集成到其移动应用中。

我们建议您先提交广告素材以供审核,然后再将其添加到出价响应中。如果您在出价时不知道广告素材类型,请与您的技术支持客户经理联系。

如果出价请求支持此广告格式,您可以通过在出价响应中设置 sdk_rendered_ad 字段,指定要通过您的 SDK 呈现的广告。

出价请求

针对移动应用内广告资源的出价请求包含发布商应用中 SDK 和适配器的详细信息,您可以在以下字段中使用这些信息进行呈现:

SDK ID

您可以使用出价请求查找 SDK ID,您必须在出价响应中使用 BidRequest.app.ext.installed_sdk.id 字段提供该 ID。

如需了解详情,请参阅 InstalledSdk 参考文档

广告单元映射

您可以使用出价请求查找与出价槽匹配的广告单元映射(使用 BidRequest.imp.ext.ad_unit_mapping 字段)。

如需了解详情,请参阅 AdUnitMapping 参考文档

安全信号

发布商可以与出价方共享安全信号。您可以在 BidRequest.imp.ext.buyer_generated_request_data.data 中找到这些内容。

如需详细了解安全信号的表示方式,请参阅 BuyerGeneratedRequestData 参考文档

测试请求

您可以使用 BidRequest.test 字段来验证出价请求是否为测试。

如需详细了解此字段,请参阅 BidRequest 参考文档

出价请求示例

id: "<bid_request_id>"
imp {
  id: "1"
  banner {
    w: 320
    h: 50
    ...
  }
...
  adx_ext {
   ...
    ad_unit_mapping {
      keyvals {
        key: "key_1"
        value: "value_1"
      }
      keyvals {
        key: "key_2"
        value: "value_2"
      }
      ...
      format: FORMAT_BANNER
    }
  }
}
app {
 ...
  adx_ext {
    installed_sdk {
      id: "com.google.ads.mediation.partner.PartnerMediationAdapter"
      sdk_version {
        major: 1
        minor: 2
        micro: 30
      }
      adapter_version {
        major: 1
        minor: 2
        micro: 3000
      }
    }
    installed_sdk {
    ...
    }
    ...
  }
}
device {
  ...
}
user {
  ...
  }
  adx_ext {
    eids {
      source: "com.google.ads.mediation.partner.PartnerMediationAdapter"
      uids {
        id: "<partner_signal_string>"
      }
    }
  }
}
at: 1
tmax: 1000
cur: "USD"
test: 1
...
adx_ext {
  google_query_id: "<query_string>"
  ...
}

出价响应

出价响应中必须包含以下字段:

  • BidResponse.seatbid.bid.adomain
  • BidResponse.seatbid.bid.ext.billing_id
  • BidResponse.seatbid.bid.crid
  • BidResponse.seatbid.bid.w
  • BidResponse.seatbid.bid.h

此外,您的出价响应必须使用以下内容填充 BidResponse.seatbid.bid.ext.sdk_rendered_ad

SDK ID

使用 id 字段为 SDK 提供 ID 以呈现广告。

您可以在 BidRequest.app.ext.installed_sdk 中找到该 ID。

已声明的广告

使用 BidResponse.seatbid.bid.ext.sdk_rendered_ad.declared_ad 提供符合 BidRequest.imp.ext.creative_enforcement_settings 中要求且能代表广告呈现数据的广告素材。应仅填充 html_snippetvideo_urlvideo_vast_xmlnative_response 之一。

如果您未填充 declared_ad,我们将无法审核广告素材,并且系统会从竞价中滤除使用该广告素材的所有出价。

如需详细了解声明的广告,请参阅 DeclaredAd 参考文档

渲染数据

使用 BidResponse.seatbid.bid.ext.sdk_rendered_ad.rendering_data 字段为买方 SDK 提供数据,以便其用于呈现您的广告。

出价以展示买方 SDK 广告时,必须在 declared_ad 字段中指定广告素材。声明的广告必须准确代表 rendering_data

以下是一个 SdkRenderedAd 对象示例:

{
  "id": "1234567",
  "rendering_data": "\xd58...,\xd4\x89\xd\xf9",
  "declared_ad": {
    "html_snippet": "<iframe src=\"https://example.com/ads?id=123&
      curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>",
  }
}

我们建议您先使用实时出价 API 提交广告素材以供审核,然后再将其添加到出价响应中。

如需详细了解 SdkRenderedAd 字段,请参阅 OpenRTB 指南

出价响应示例

以下是每种广告格式的出价响应示例:

id: "<bid_request_id>"
seatbid {
  bid {
    id: "<bidder_generated_response_id>"
    impid: "1"
    price: 99
    adomain: "https://play.google.com/store/apps/details?id=com.test.app"
    cid: "<billing_id>"
    crid: "<creative_id>"
    w: 320
    h: 50
    burl: "https://abc.com/billing?td=fn&win_price=${AUCTION_PRICE}"
    adx_ext {
      sdk_rendered_ad {
        id: "com.google.ads.mediation.partner.PartnerMediationAdapter"
        rendering_data: "<rendering_data_string>"
        declared_ad {
          click_through_url: "https://play.google.com/store/apps/details?id=com.test.app"
          html_snippet: "<!doctype html> <html> ... </html>"
        }
      }
      event_notification_token {
        payload: "<payload_string>"
      }
      billing_id: 141763360450
    }
  }
}
bidid: "<bidder_generated_response_id>"
cur: "USD"

插页式广告

id: "<bid_request_id>"
seatbid {
  bid {
    id: "<bidder_generated_response_id>"
    impid: "1"
    price: 400
    adomain: "https://play.google.com/store/apps/details?id=com.test.app"
    cid: "<billing_id>"
    crid: "<creative_id>"
    w: 412
    h: 775
    adx_ext {
      sdk_rendered_ad {
        id: "com.google.ads.mediation.partner.PartnerMediationAdapter"
        rendering_data: "<rendering_data_string>"
        declared_ad {
          click_through_url: "https://play.google.com/store/apps/details?id=com.test.app"
          video_vast_xml: "<VAST version=\"2.0\"><Ad>...</Ad></VAST>"
        }
      }
      event_notification_token {
        payload: "<payload_string>"
      }
    }
  }
}
bidid: "<bidder_generated_response_id>"
cur: "USD"

激励视频

id: "<bid_request_id>"
seatbid {
  bid {
    id: "<bidder_generated_response_id>"
    impid: "1"
    price: 400
    adomain: "https://play.google.com/store/apps/details?id=com.test.app"
    cid: "<billing_id>"
    crid: "<creative_id>"
    w: 412
    h: 775
    adx_ext {
      sdk_rendered_ad {
        id: "com.google.ads.mediation.partner.PartnerMediationAdapter"
        rendering_data: "<rendering_data_string>"
        declared_ad {
          click_through_url: "https://play.google.com/store/apps/details?id=com.test.app"
          video_vast_xml: "<VAST version=\"2.0\"><Ad>...</Ad></VAST>"
        }
      }
      event_notification_token {
        payload: "<payload_string>"
      }
    }
  }
}
bidid: "<bidder_generated_response_id>"
cur: "USD"

原生

id: "<bid_request_id>"
seatbid {
  bid {
    id: "<bidder_generated_response_id>"
    impid: "1"
    price: 400
    adomain: "https://play.google.com/store/apps/details?id=com.test.app"
    cid: "<billing_id>"
    crid: "<creative_id>"
    w: 1200
    h: 627
    adx_ext {
      sdk_rendered_ad {
        id: "com.google.ads.mediation.partner.PartnerMediationAdapter"
        rendering_data: "<rendering_data_string>"
        declared_ad {
          click_through_url: "https://play.google.com/store/apps/details?id=com.test.app"
          native_response {
            ...
            assets {
              id: 1
              title {
                text: ""
              }
            }
            assets {
              id: 2
              data {
                value: "<some_string>"
              }
            }
            assets {
              id: 3
              data {
                value: "View now"
              }
            }
            assets {
              id: 4
              img {
                url: "<valid_image_url>"
                w: 1200
                h: 627
                type: 3
              }
            }
            assets {
              id: 5
              img {
                url: "<valid_image_url>"
                w: 100
                h: 100
                type: 1
              }
            }
            assets {
              id: 6
              data {
                value: ""
              }
            }
            assets {
              id: 7
              data {
                value: "<some_string>"
              }
            }
            link {
              url: "<destination_link>"
            }
          }
        }
      }
      event_notification_token {
        payload: "<payload_string>"
      }
    }
  }
}
bidid: "<bidder_generated_response_id>"
cur: "USD"

广告素材审核

广告素材需通过审核才能投放,以确保其符合我们的政策和发布商设置。

您可以通过以下两种方式提交广告素材以供审核:

Real-time Bidding API(推荐)

您可以使用 Real-time Bidding API 的 buyers.creatives.create 方法提交广告素材以供审核

该 API 要求每个广告素材只提交一次,并且可让您查看广告素材审核状态。

出价响应

您可以直接在出价响应中提交新的广告素材。

您必须使用 SdkRenderedAd 对象的 declared_ad 字段,提交包含买方 SDK 广告素材的出价响应以供审核。

只有在您多次出价后,我们才会审核在出价响应中提交的广告素材。在审核完成之前提交的所有出价都会从竞价中滤除。 您可以使用实时出价接口实时出价 API 在审核开始后检查广告素材的状态。

如需了解详情,请参阅广告素材指南