买方 SDK 广告格式

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

如果发布商在其应用中集成了您的出价适配器,则其移动应用广告资源可以接受买方 SDK 呈现的广告格式的出价。它们的呈现方式取决于您的 SDK 实现和您在出价响应中提交的 SDKRenderedAd

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

要求

买方 SDK 广告仅面向已获批的买方提供。您可以将 Authorized Buyers 直接与 Google 移动广告 SDK 集成,包括中介出价方适配器安全信号。发布商需要将您的 SDK 和适配器集成到其移动应用中。

如需详细了解这些集成点,或讨论其他与 Google 移动广告 SDK 的设备端信号或处理集成,以提高广告相关性或效果衡量,请与您的技术客户经理联系。

我们建议您先提交广告素材以供审核,然后再将其纳入出价响应中。

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

出价请求

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

SDK ID

您可以使用出价请求来查找必须在出价响应中通过 BidRequest.app.ext.installed_sdk.id 字段提供的 SDK 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>",
  }
}

我们建议您先使用 Real-time Bidding 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 来查看广告素材在审核开始后的状态。

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