Formato del anuncio del SDK del comprador

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 en BidRequest.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 o native_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 el rendering_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:

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 objeto SdkRenderedAd 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.