Los anuncios del SDK del comprador usan creatividades renderizadas por tu propio SDK.
El inventario de aplicaciones para dispositivos móviles de los publicadores que integran tu adaptador de ofertas en su app puede aceptar ofertas con el formato de anuncio renderizado del SDK del comprador. La forma en que se renderizan se basa en tu implementación del SDK y en el SDKRenderedAd
que envías en la respuesta de la oferta.
Puedes realizar una oferta que incluya un anuncio renderizado por el SDK del comprador o cualquier otro formato de anuncio que admita el SDK de anuncios de Google para dispositivos móviles, pero se filtrarán las ofertas que contengan ambos.
Requisitos
Los anuncios del SDK del comprador están disponibles para los compradores aprobados. Este formato requiere un esfuerzo adicional de tu parte y del publicador. Comunícate con tu administrador técnico de cuentas para configurar tu cuenta para los anuncios del SDK del comprador. Luego, puedes implementar un adaptador de ofertas que permita que tu SDK se comunique con el SDK de anuncios de Google para dispositivos móviles. El publicador debe integrar tu SDK y adaptador en sus apps para dispositivos móviles.
Te recomendamos que envíes las creatividades para su revisión antes de incluirlas en una respuesta a la oferta. Comunícate con tu administrador técnico de cuentas si no conoces el tipo de creatividad en el momento de la oferta.
Si una solicitud de oferta admite este formato de anuncio, puedes especificar un anuncio que se renderice con tu SDK configurando el campo sdk_rendered_ad
en la respuesta de la oferta.
Solicitud de oferta
Las solicitudes de oferta para el inventario de aplicaciones para dispositivos móviles incluyen detalles sobre los SDKs y adaptadores en la app del publicador que puedes usar para la renderización en los siguientes campos:
- ID del SDK
Puedes usar la solicitud de oferta para encontrar el ID del SDK que debes proporcionar en la respuesta de oferta con el campo
BidRequest.app.ext.installed_sdk.id
.Puedes obtener más información al respecto en la documentación de referencia de
InstalledSdk
.- Asignación de unidades de anuncios
Puedes usar la solicitud de oferta para encontrar las asignaciones de unidades de anuncios que coincidan con el espacio de oferta con el campo
BidRequest.imp.ext.ad_unit_mapping
.Puedes obtener más información al respecto en la documentación de referencia de
AdUnitMapping
.- Indicadores seguros
Los publicadores pueden compartir indicadores seguros con los ofertantes. Puedes encontrarlos en
BidRequest.imp.ext.buyer_generated_request_data.data
.Puedes obtener más información sobre cómo se representan los indicadores seguros en la documentación de referencia de
BuyerGeneratedRequestData
.- Solicitudes de prueba
Puedes usar el campo
BidRequest.test
para verificar si la solicitud de oferta es una prueba.Puedes obtener más información sobre este campo en la documentación de referencia de
BidRequest
.
Ejemplo de solicitud de oferta
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>"
...
}
Respuesta a la oferta
Los siguientes campos son obligatorios en la respuesta a la oferta:
BidResponse.seatbid.bid.adomain
BidResponse.seatbid.bid.ext.billing_id
BidResponse.seatbid.bid.crid
BidResponse.seatbid.bid.w
BidResponse.seatbid.bid.h
Además, tu respuesta de oferta debe propagar BidResponse.seatbid.bid.ext.sdk_rendered_ad
con lo siguiente:
- ID del SDK
Usa el campo
id
para proporcionar el ID para que el SDK renderice el anuncio.Puedes encontrar el ID en
BidRequest.app.ext.installed_sdk
.- Anuncio declarado
Usa
BidResponse.seatbid.bid.ext.sdk_rendered_ad.declared_ad
para proporcionar una creatividad que cumpla con los requisitos que se encuentran enBidRequest.imp.ext.creative_enforcement_settings
y que sea representativa de los datos de renderización del anuncio. Solo se debe propagar uno de los siguientes valores:html_snippet
,video_url
,video_vast_xml
onative_response
.Si no propagas
declared_ad
, no podremos revisar la creatividad y todas las ofertas con la creatividad se filtrarán de la subasta.Puedes obtener más información sobre el anuncio declarado en la documentación de referencia de
DeclaredAd
.- Renderización de datos
Usa el campo
BidResponse.seatbid.bid.ext.sdk_rendered_ad.rendering_data
para proporcionar los datos que el SDK del comprador usará para renderizar tu anuncio.Las ofertas para colocar un anuncio del SDK del comprador deben especificar una creatividad en el campo
declared_ad
. El anuncio declarado debe representar con precisión elrendering_data
.Este es un objeto
SdkRenderedAd
de ejemplo:{ "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>", } }
Te recomendamos que uses la API de Real-time Bidding para enviar creatividades para su revisión antes de incluirlas en una respuesta de oferta.
Consulta la guía de OpenRTB para obtener más detalles sobre los campos SdkRenderedAd
.
Ejemplo de respuesta de oferta
A continuación, se muestran ejemplos de respuestas de ofertas para cada formato de anuncio:
Banner
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"
Intersticial
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"
Video recompensado
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"
Nativo
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"
Revisión de creatividades
Las creatividades se revisan antes de su publicación para garantizar que cumplan con nuestras políticas y la configuración del publicador.
Estas son dos maneras de enviar creatividades para su revisión:
- API de Real-time Bidding (recomendado)
Puedes usar el método
buyers.creatives.create
de la API de Ofertas en tiempo real para enviar creatividades para su revisión.La API solo requiere un envío por creatividad y te permite verificar el estado de la revisión de tu creatividad.
- Respuesta a la oferta
Puedes enviar creatividades nuevas directamente en la respuesta de oferta.
Debes usar el campo
declared_ad
del objetoSdkRenderedAd
para enviar una respuesta de oferta con una creatividad del SDK del comprador para su revisión.Las creatividades que se envían en la respuesta de oferta solo se revisan después de muchas ofertas. Todas las ofertas que se realicen antes de que se complete la revisión se filtrarán de la subasta. Puedes usar la interfaz de ofertas en tiempo real o la API de ofertas en tiempo real para verificar el estado de una creatividad después de que comience la revisión.
Consulta la guía de creatividades para obtener más detalles.