Crea la risposta

Dopo che l'applicazione elabora la richiesta di offerta da Google, deve creare e inviare una risposta. Questa guida spiega come codificare l'applicazione per creare la risposta.

Creare un messaggio BidResponse

Per inviare un'offerta, la tua applicazione di offerta deve rispondere a una richiesta di offerta con un BidResponse contenente un Bid nel formato configurato. Se utilizzi il formato JSON, la risposta deve impostare l'intestazione Content-Type su application/json; charset=utf-8 e includere il JSON BidResponse nel corpo. Se utilizzi il formato Protobuf, la tua applicazione deve impostare l'intestazione Content-Type su application/octet-stream e includere BidResponse serializzato nel corpo.

Per creare e serializzare un BidResponse per il formato Protobuf, devi generare e utilizzare le librerie Protobuf in base a openrtb.proto e openrtb-adx.proto, che implementano rispettivamente i campi BidResponse OpenRTB standard e le estensioni Google in Protobuf. Questi si trovano in Protos & Reference Data.

Se non vuoi fare un'offerta per un'impressione, devi restituire una risposta HTTP 204 vuota. La tua applicazione deve restituire una risposta a ogni BidRequest. I timeout e le risposte che non possono essere analizzate sono considerati errori e Google limita gli strumenti di offerta con tassi di errore elevati.

ID creatività

Il tuo BidResponse specifica una creatività tramite il campo BidResponse.seatbid.bid.crid (limite di 128 byte). Anche le creatività simili devono avere valori univoci per questo campo se differiscono per caratteristiche importanti, tra cui, a titolo esemplificativo: dimensioni, URL dichiarato, attributi della creatività e tipi di fornitori. In altre parole, devi assegnare ID creatività diversi a due annunci che:

  • Aspetto o comportamento diversi.
  • Esegui il rendering di immagini diverse.
  • Esegui il rendering con mezzi diversi (ad esempio, un annuncio è costituito da un'immagine, mentre l'altro è un video).

Quando progetti la tua applicazione, devi decidere un modo sistematico per generare identificatori che abbiano senso per i tipi di creatività che prevedi di inviare.

Attributi annuncio

Google consiglia di dichiarare gli attributi delle creatività per descrivere le caratteristiche dell'annuncio e il relativo targeting utilizzando una combinazione di BidResponse.seatbid.bid.apis e BidResponse.seatbid.bid.attr oppure l'estensione BidResponse.seatbid.bid.ext.attribute. Di seguito viene descritto come dichiarare gli attributi:

  • VPAID
    Imposta BidResponse.seatbid.bid.apis su VPAID_1, o VPAID_2. Per il formato JSON, questo valore può essere impostato su 1 o 2 rispettivamente.
  • MRAID
    Imposta BidResponse.seatbid.bid.apis su MRAID_1 o 3 per il formato JSON.
  • SIZELESS
    Imposta BidResponse.seatbid.bid.attr su RESPONSIVE o 18 per il formato JSON.
  • PLAYABLE
    Ciò è indicato impostando BidResponse.seatbid.bid.attr su USER_INTERACTIVE o 13 per il formato JSON.

Consulta la risorsa Creatività per una spiegazione su come ricevere feedback sulle proprietà rilevate delle tue creatività.

Campi Open Bidding

Le risposte all'offerta inviate dagli offerenti di piattaforme di scambio e reti che partecipano a Open Bidding sono simili a quelle di Authorized Buyers che partecipano alle offerte in tempo reale standard. I clienti di Open Bidding possono specificare un numero ridotto di campi aggiuntivi e alcuni campi esistenti potrebbero avere utilizzi alternativi. Questi includono:

Campo Dettagli
BidResponse.imp.pmp.deals.id

L'ID deal dello spazio dei nomi dell'exchange associato a questa offerta e comunicato ai publisher.

BidResponse.seatbid.bid.ext.exchange_deal_type

Il tipo di deal segnalato ai publisher, che influisce sul modo in cui il deal viene trattato nell'asta.

BidResponse.seatbid.bid.ext.third_party_buyer_token Token utilizzato per identificare le informazioni dell'acquirente di terze parti finale se la piattaforma di scambio pubblicitario come offerente di Open Bidding è un intermediario. Questo valore viene ottenuto dall'acquirente di terze parti e deve essere trasmesso a Google senza modifiche nella risposta all'offerta.

Consigli

  • Attiva le connessioni HTTPS persistenti (note anche come "keep-alive" o "riutilizzo della connessione") sui tuoi server. Imposta il timeout su almeno 10 secondi. Valori più elevati sono utili in molti casi. Google verifica questo aspetto durante i test di latenza iniziali della tua applicazione, perché Authorized Buyers invia richieste a una velocità elevata e deve evitare il sovraccarico di latenza dovuto alla creazione di una connessione TCP separata per ogni richiesta.
  • Includi l'URL di monitoraggio delle impressioni facoltativo per monitorare il rendering dell'impressione anziché la vittoria dell'offerente. A causa del calo tra le vittorie e i rendering, si ottengono statistiche di monitoraggio più accurate.

  • Mantieni il codice offerente privo di dipendenze da campi ritirati, che possono causare errori nelle offerte.
  • Includi BidResponse.seatbid.bid.w e BidResponse.seatbid.bid.h nel tuo BidResponse. Una BidResponse a una richiesta che include più dimensioni degli annunci deve includere questi campi, altrimenti verrà esclusa dall'asta.
  • Limita le dimensioni della risposta a meno di 8000 caratteri. Risposte molto grandi possono aumentare la latenza di rete e causare timeout.
  • Segui le linee guida per le offerte sull'inventario iOS che richiedono l'attribuzione SKAdNetwork.

Esempio di risposta all'offerta

Gli esempi riportati di seguito rappresentano campioni leggibili delle richieste Protobuf e JSON.

OpenRTB Protobuf

OpenRTB JSON

Importante:i messaggi Protobuf illustrati negli esempi sono rappresentati qui come testo leggibile. Tuttavia, i messaggi non vengono inviati in questo modo. Quando utilizzi il formato OpenRTB Protobuf, vengono accettati solo i messaggi BidResponse serializzati.

Puoi creare e serializzare un messaggio BidResponse utilizzando il seguente codice C++:

BidResponse bid_response;
// fill in bid response with bid information
string post_response;
if (bid_response.SerializeToString(&post_response)) {
  // respond to the POST with post_response as the content
} else {
  // return an error to the POST
}

Specifica la creatività

La risposta all'offerta specifica la creatività da pubblicare se la tua offerta vince. La tua offerta deve includere uno dei formati degli annunci supportati (AMP, video, nativo). In questo esempio, specifichiamo la creatività utilizzando il campo html_snippet.

In alternativa, puoi specificare la creatività utilizzando uno dei seguenti campi, in base al formato dell'annuncio:

  • Annuncio di cui è stato eseguito il rendering dell'SDK
    • BidResponse.seatbid.bid.ext.sdk_rendered_ad
  • AMP
    • BidResponse.seatbid.bid.amp_ad_url
  • Video
    • BidResponse.seatbid.bid.adm
  • Nativo
    • BidResponse.seatbid.bid.adm_native

Specifica un annuncio ospitato sui tuoi server utilizzando uno snippet HTML nel campo BidResponse.seatbid.bid.adm. Lo snippet è racchiuso in un iFrame inserito nella pagina web, pertanto l'annuncio viene recuperato e visualizzato quando la pagina viene caricata. Devi creare lo snippet HTML in modo che l'annuncio (banner o interstitial) venga visualizzato correttamente all'interno di un iframe e con dimensioni appropriate per l'area annuncio su cui stai facendo offerte.

Inoltre, le dimensioni dell'annuncio dichiarate nella risposta all'offerta devono corrispondere esattamente a una delle combinazioni di dimensioni nella richiesta di offerta quando:

  • Un annuncio è un banner normale (non video, nativo o interstitial).
  • L'offerente ha dichiarato le dimensioni nella risposta all'offerta. La dichiarazione delle dimensioni è obbligatoria ogni volta che nella richiesta è presente più di una dimensione.
  • Viene fatta un'eccezione per gli annunci interstitial. Per gli interstitial, la larghezza deve essere almeno il 50% della larghezza dello schermo e l'altezza almeno il 40% dell'altezza dello schermo.

Puoi specificare una creatività snippet HTML utilizzando qualsiasi codice HTML valido che venga visualizzato correttamente, ma tieni presente le limitazioni relative alla specifica del campo crid nella sezione Crea messaggio BidResponse. Un utilizzo è quello di inserire informazioni aggiuntive negli argomenti degli URL recuperati dai server durante il rendering dell'annuncio. In questo modo puoi trasmettere dati arbitrari sull'impressione ai tuoi server.

La maggior parte delle norme relative agli snippet HTML restituiti nelle risposte all'offerta sono le stesse degli annunci di terze parti. Per saperne di più, consulta le linee guida del programma Authorized Buyers, i requisiti per la pubblicazione di annunci di terze parti e la sezione Dichiarare gli URL clickthrough negli annunci.

Specificare le macro

Le macro sono testo formattato incorporato in alcuni campi di risposta all'offerta contenenti URL che vengono sostituiti con un valore pertinente al momento della pubblicazione dell'annuncio. Ad esempio, se l'offerta vincente includeva la macro AUCTION_PRICE nello snippet HTML della creatività incluso nell'offerta, la macro verrà sostituita con un valore che potrai decriptare per determinare l'importo che hai pagato per l'impressione nell'asta.

Puoi includere macro nei seguenti campi:

  • BidResponse.seatbid.bid.adm

    Le macro sono supportate per i formati HTML dello snippet, nativo, URL video e XML VAST video.

  • BidResponse.seatbid.bid.adm_native.eventtrackers.url

  • BidResponse.seatbid.bid.adm_native.imptrackers

  • BidResponse.seatbid.bid.ext.amp_ad_url

    Per le creatività AMP sono supportate solo le macro WINNING_PRICE e WINNING_PRICE_ESC specifiche di Google.

  • BidResponse.seatbid.bid.burl

  • BidResponse.seatbid.bid.ext.impression_tracking_url

    Utilizza questo valore anziché BidResponse.seatbid.bid.burl se hai bisogno di più di un URL di fatturazione.

Ad esempio, potresti includere una macro come parte di uno snippet HTML incorporando ${MACRO} nell'URL utilizzato per recuperare la creatività, dove MACRO è una delle macro supportate descritte nella specifica OpenRTB.

Macro di Google

Google supporta macro aggiuntive oltre a quelle presenti nella specifica OpenRTB. Queste macro hanno un formato diverso e, se incorporate in un URL, vengono visualizzate come %%MACRO%%. La seguente tabella descrive queste macro:

Macro Descrizione
ADVERTISING_IDENTIFIER Consente agli acquirenti di ricevere l'IDFA di iOS o l'ID pubblicità di Android durante il rendering delle impressioni. Per maggiori dettagli, vedi Decrittografia degli identificatori inserzionista.
CACHEBUSTER Rappresentazione come stringa di un numero intero casuale non firmato di 4 byte.
CLICK_URL_UNESC

URL di clic senza caratteri di escape dell'annuncio. Nello snippet, la macro deve essere seguita direttamente da una versione con caratteri di escape dell'URL di clic di terze parti.

Ad esempio, se l'URL di clic di terze parti è http://my.adserver.com/some/path/handleclick?click=clk, può essere utilizzato il seguente codice con la versione con caratteri di escape singoli dell'URL di clic di terze parti dopo la chiamata della macro:

<a href="%%CLICK_URL_UNESC%%http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>

Al momento della pubblicazione dell'annuncio, questo valore viene espanso in:

<a href="http://google-click-url?...&ad_url=http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>

L'URL registrerà prima il clic con Google, poi reindirizzerà all'URL di clic di terze parti.

CLICK_URL_ESC

L'URL di clic con caratteri di escape dell'annuncio. Da utilizzare al posto di CLICK_URL_UNESC se devi passare prima il valore tramite un altro server che restituisce un reindirizzamento.

Ad esempio, il seguente codice potrebbe essere utilizzato in uno snippet HTML:

<a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%"></a>

Al momento della pubblicazione dell'annuncio, questo valore viene espanso in:

<a href="http://my.adserver.com/click?google_click_url=http://google-click- url%3F...%26ad_url%3D"></a>

In questo modo il clic verrà registrato con my.adserver.com, che sarà quindi responsabile del reindirizzamento all'URL trasmesso nel parametro google_click_url. Ciò presuppone che my.adserver.com esegua l'escape del parametro google_click_url.

Puoi aggiungere un URL con doppia codifica dopo %%CLICK_URL_ESC%%. Dopo l'escape eseguito da my.adserver.com, rimane una versione con escape singolo dell'URL aggiunto a google_click_url. Quando viene recuperato google_click_url, viene eseguito un altro unescape e poi il reindirizzamento.

CLICK_URL_ESC_ESC

L'URL con caratteri di escape doppi dell'annuncio. Da utilizzare al posto di CLICK_URL_UNESC se devi passare prima il valore tramite un altro server che restituisce un reindirizzamento.

Ad esempio, il seguente codice potrebbe essere utilizzato in uno snippet HTML:

<a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC_ESC%%"></a>

Al momento della pubblicazione dell'annuncio, questo valore viene espanso in:

<a href="http://my.otheradserver.com/click?google_click_url=http%3A%2F%2Fmy.adserver.com%2Fclick%3Fgoogle_click_url%3Dhttp%3A%2F%2Fgoogle-click-%20url%253F...%2526ad_url%253D"></a>
SCHEME Espanso a http: se la richiesta di offerta non richiede SSL o a https: se la richiesta di offerta richiede SSL.
SITE Il dominio URL con caratteri di escape dell'URL di contenuti o l'ID anonimo per l'inventario anonimo.
SITE_URL Deprecato. Sostituita dalla macro SITE, che offre funzionalità identiche.
TZ_OFFSET La differenza di fuso orario.
VERIFICATION

I diversi valori per la produzione e quando la creatività viene scansionata nella pipeline di verifica. Il formato è: %%?VERIFICATION:true-val:false-val%% dove è possibile utilizzare qualsiasi valore tranne le macro per true-val e false-val, incluse le stringhe vuote. Per Open Bidding, consigliamo alle piattaforme di scambio di utilizzare questa macro; una volta fatto, le piattaforme lato domanda non devono apportare modifiche.

Ad esempio, se una creatività dovesse includere %%?VERIFICATION:-1:5000%%, la sostituzione del testo sarebbe 5000 durante la pubblicazione e -1 nella pipeline di verifica. per distinguere questi due insiemi di ping.

WINNING_PRICE

Costo impressione codificato (CPI) in micro della valuta dell'account. Ad esempio, un CPM vincente di 5 $corrisponde a un CPM di 5.000.000 di micro, o un CPI di 5000 micro. Il valore decodificato di WINNING_PRICE in questo caso sarebbe 5000. Il prezzo vincente è specificato in CPI.

Per analizzare questa macro, devi implementare un'applicazione che decripti le conferme di prezzo. Per ulteriori informazioni, consulta la pagina Decrittografia delle conferme di prezzo.

WINNING_PRICE_ESC WINNING_PRICE con codifica URL.

Google richiede l'utilizzo della macro CLICK_URL_UNESC o CLICK_URL_ESC all'interno della creatività dell'annuncio pubblicato da terze parti. Google utilizza le macro CLICK_URL per il monitoraggio dei clic.

L'escape degli URL nelle macro utilizza il seguente schema:

  • Il carattere spazio viene sostituito da un segno più (+).
  • I caratteri alfanumerici (0-9, a-z, A-Z) e i caratteri del set !()*,-./:_~ rimangono invariati.
  • Tutti gli altri caratteri vengono sostituiti da %XX, dove XX è il numero esadecimale che rappresenta il carattere.

Limitazioni e requisiti per i publisher

La richiesta di offerta include informazioni sui tipi di limitazioni e requisiti che i publisher impongono alle creatività nell'asta.

  • BidRequest.bcat
    • Puoi confrontare le categorie bloccate specificate da questo campo con quelle rilevate per le creatività inviate utilizzando il campo detectedCategories dell'API Real-time Bidding.
  • BidRequest.imp.ext.allowed_vendor_type
  • BidRequest.imp.secure
    • In pratica, questo valore sarà sempre impostato su true perché Google richiede il supporto SSL per tutte le creatività.
  • BidRequest.imp.{audio/banner/native/video}
  • BidRequest.imp.{audio/banner/native/video}.api
  • BidRequest.imp.{audio/banner/native/video}.battr
  • BidRequest.imp.{audio/banner/video}.mimes

Non fare mai offerte con un annuncio contenente una funzionalità con limitazioni. Per le funzionalità consentite, come il tipo di fornitore, restituisci un annuncio solo se il tipo di fornitore è presente nell'elenco allowed_vendor_type in BidRequest. Nella tua offerta devono essere inclusi solo i formati annuncio specificati nella richiesta di offerta compilando campi come BidRequest.imp.banner. Per ulteriori dettagli, consulta i commenti relativi a questi campi nella definizione del buffer di protocollo BidRequest.

Se un annuncio viene restituito in BidResponse, devi impostare con precisione i campi BidResponse.seatbid.bid.attr, BidResponse.seatbid.bid.cat e BidResponse.seatbid.bid.adomain o BidResponse.seatbid.bid.adm_native.link.url in BidResponse. Se un annuncio ha più valori applicabili per questi campi, devi includere ogni valore. Per ulteriori dettagli, consulta i commenti relativi a questi campi nella definizione del buffer di protocollo BidResponse. Le risposte che non hanno questi campi impostati vengono eliminate.

Open Measurement

Open Measurement ti consente di specificare fornitori di terze parti che forniscono servizi di misurazione e verifica indipendenti per gli annunci pubblicati negli ambienti delle app mobile.

I formati degli annunci supportati includono annunci video, banner e interstitial. Per ulteriori informazioni su come utilizzare Open Measurement in una risposta all'offerta contenente questi formati, consulta l'articolo del Centro assistenza relativo all'SDK Open Measurement.

Esempi di risposte all'offerta

Le sezioni seguenti mostrano esempi di risposte all'offerta per diversi tipi di annuncio.

Banner app

OpenRTB Protobuf

OpenRTB JSON

Interstitial per app

OpenRTB Protobuf

OpenRTB JSON

Video interstitial per app

OpenRTB Protobuf

OpenRTB JSON

App nativa

OpenRTB Protobuf

OpenRTB JSON

Video sul Web

OpenRTB Protobuf

OpenRTB JSON

Banner web mobile per l'offerente di Exchange

OpenRTB Protobuf

OpenRTB JSON