Formato de anúncio do SDK do comprador

Os anúncios do SDK do comprador usam criativos renderizados pelo seu próprio SDK.

O inventário de apps para dispositivos móveis dos editores que integram seu adaptador de lances no app podem aceitar lances com o formato de anúncio renderizado pelo SDK do comprador. A maneira como eles são renderizados é baseada na implementação do SDK e na SDKRenderedAd enviada na resposta do lance.

É possível fazer um lance incluindo um anúncio renderizado pelo SDK do comprador ou qualquer outro formato de anúncio compatível com o SDK dos anúncios para dispositivos móveis do Google, mas todos os lances que tiverem ambos serão filtrados.

Requisitos

Os anúncios do SDK do comprador estão disponíveis para compradores aprovados. Esse formato requer mais esforço da sua parte e do editor. Entre em contato com seu Gerente técnico de contas para configurar sua conta para anúncios do SDK do comprador. Em seguida, é possível implementar um adaptador de lances que permita a comunicação do SDK com o SDK dos anúncios para dispositivos móveis do Google. O editor precisa integrar o SDK e o adaptador aos apps para dispositivos móveis.

Recomendamos que você envie criativos para revisão antes de incluí-los em uma resposta do lance. Entre em contato com o gerente técnico da conta se você não souber o tipo de criativo no momento do lance.

Se uma solicitação de lance for compatível com esse formato de anúncio, será possível especificar um anúncio que será renderizado com o SDK definindo o campo sdk_rendered_ad na resposta de lance.

Solicitação de lance

As solicitações de lance para inventário de apps para dispositivos móveis incluem detalhes sobre os SDKs e os adaptadores no app do editor que podem ser usados para renderização nos seguintes campos:

ID do SDK

É possível usar a solicitação de lance para encontrar o id que você precisa fornecer na resposta de lance de um anúncio renderizado pelo SDK do comprador.

Confira os seguintes campos:

  • Authorized Buyers: BidRequest.mobile.installed_sdk
  • OpenRTB: BidRequest.app.ext.installed_sdk

Saiba mais sobre a mensagem InstalledSdk nos guias de protocolo do Google e do OpenRTB.

Mapeamento de blocos de anúncios

É possível usar a solicitação de lance para ler mapeamentos de blocos de anúncios que correspondem ao espaço do lance.

Confira os seguintes campos:

  • Authorized Buyers: BidRequest.AdSlot.ad_unit_mapping
  • OpenRTB: BidRequest.imp.ext.ad_unit_mapping

Saiba mais sobre o objeto AdUnitMapping nos guias de protocolo do Google e do OpenRTB.

Indicadores seguros

Leia o objeto "Extended Id", que é a extensão padrão usada para transmitir indicadores seguros escolhidos pelo editor.

Confira os seguintes campos:

  • Authorized Buyers: BidRequest.AdSlot.SecureSignal.data
  • OpenRTB: BidRequest.user.ext.eids.uids.id

Saiba mais sobre o objeto Extended Id nos guias de protocolo do Google e do OpenRTB.

Solicitações de teste

Leia o campo "Solicitação de teste" para entender se a solicitação de lance é um teste.

Confira os seguintes campos:

  • Authorized Buyers: BidRequest.is_test
  • OpenRTB: BidRequest.test

Saiba mais sobre o campo Test nos guias de protocolo do Google e do OpenRTB.

Exemplo de solicitação de lance

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>"
  ...
}

Resposta do lance

Lance de licença

Os campos a seguir são obrigatórios no objeto BidResponse.seatbid.bid:

  • Authorized Buyers:

    • BidResponse.Ad.click_through_url
    • BidResponse.Ad.AdSlot.billing_id
    • BidResponse.Ad.buyer_creative_id
    • BidResponse.Ad.width
    • BidResponse.Ad.height
  • OpenRTB:

    • BidResponse.seatbid.bid.adomain
    • BidResponse.seatbid.bid.cid
    • BidResponse.seatbid.bid.crid
    • BidResponse.seatbid.bid.w
    • BidResponse.seatbid.bid.h

Saiba mais sobre a mensagem SeatBid nos guias de protocolo do Google e do OpenRTB.

A resposta do lance precisa incluir um SdkRenderedAd com o seguinte:

ID do SDK

Use o campo id para fornecer o ID para que o SDK renderize o anúncio.

Encontre o ID na solicitação de lance com os seguintes campos:

  • Authorized Buyers: BidRequest.mobile.installed_sdk
  • OpenRTB: BidRequest.app.ext.installed_sdk

Saiba mais sobre a mensagem InstalledSdk nos guias de protocolo do Google e do OpenRTB.

Anúncio declarado

Use um campo declared_ad para fornecer um criativo que atenda aos requisitos CreativeEnforcementSettings da solicitação de lance e represente os dados de renderização do anúncio. Para formatos de anúncios não nativos, apenas html_snippet, video_url ou video_vast_xml precisa ser apresentado. Para o formato de anúncio nativo, somente native_response deve ser apresentado.

Se você não preencher declared_ad, não será possível revisar o criativo, e todos os lances com ele serão filtrados do leilão.

Dados de renderização

Use o campo rendering_data para fornecer os dados que o SDK do comprador usa para renderizar seu anúncio.

  • Authorized Buyers: BidResponse.ad.sdk_rendered_ad.rendering_data
  • OpenRTB: BidResponse.seatbid.bid.ext.sdk_rendered_ad.rendering_data

Os lances para posicionar um anúncio do SDK do comprador precisam especificar um criativo no campo declared_ad. O anúncio declarado precisa representar com precisão o rendering_data.

Confira um exemplo de objeto 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>",
  }
}

Recomendamos usar a API de lances em tempo real a fim de enviar criativos para revisão antes de incluí-los em uma resposta do lance.

Consulte os guias do protocolo do Google e do OpenRTB para ver mais detalhes sobre os campos SdkRenderedAd.

Exemplo de resposta do lance

Veja alguns exemplos de respostas de lance para cada formato de anúncio:

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"

Vídeo premiado

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"

Revisão do criativo

Os criativos são revisados antes de serem veiculados para garantir que atendam às nossas políticas e configurações do editor.

Veja duas maneiras de enviar criativos para revisão:

API Real-time Bidding (recomendado)

É possível usar o método buyers.creatives.create da API Real-time Bidding para enviar criativos para revisão.

A API exige somente um envio por criativo e permite verificar o status da revisão do criativo.

Resposta do lance

É possível enviar novos criativos diretamente na resposta do lance.

Use o campo declared_ad do objeto SdkRenderedAd para enviar uma resposta do lance com um criativo do SDK do comprador para revisão.

Os criativos enviados na resposta do lance só são revisados depois de muitos lances. Todos os lances feitos antes da conclusão da revisão são filtrados do leilão. É possível usar a interface de lances em tempo real ou a API de lances em tempo real para verificar o status de um criativo após o início da revisão.

Confira o guia de criativos para mais detalhes.