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:
VPAIDImpostaBidResponse.seatbid.bid.apissuVPAID_1, oVPAID_2. Per il formato JSON, questo valore può essere impostato su1o2rispettivamente.MRAIDImpostaBidResponse.seatbid.bid.apissuMRAID_1o3per il formato JSON.SIZELESSImpostaBidResponse.seatbid.bid.attrsuRESPONSIVEo18per il formato JSON.PLAYABLECiò è indicato impostandoBidResponse.seatbid.bid.attrsuUSER_INTERACTIVEo13per 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.weBidResponse.seatbid.bid.hnel tuoBidResponse. UnaBidResponsea 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.admLe 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_urlPer le creatività AMP sono supportate solo le macro
WINNING_PRICEeWINNING_PRICE_ESCspecifiche di Google. -
BidResponse.seatbid.bid.burl -
BidResponse.seatbid.bid.ext.impression_tracking_urlUtilizza questo valore anziché
BidResponse.seatbid.bid.burlse 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 è
<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
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 Puoi aggiungere un URL con doppia codifica dopo
|
CLICK_URL_ESC_ESC |
L'URL con caratteri di escape doppi dell'annuncio. Da utilizzare al posto di
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 è:
Ad esempio, se una creatività dovesse includere
|
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 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, doveXXè 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
detectedCategoriesdell'API Real-time Bidding.
- Puoi confrontare le categorie bloccate specificate da questo campo con quelle
rilevate per le creatività inviate utilizzando il campo
BidRequest.imp.ext.allowed_vendor_typeBidRequest.imp.secure- In pratica, questo valore sarà sempre impostato su
trueperché Google richiede il supporto SSL per tutte le creatività.
- In pratica, questo valore sarà sempre impostato su
BidRequest.imp.{audio/banner/native/video}BidRequest.imp.{audio/banner/native/video}.apiBidRequest.imp.{audio/banner/native/video}.battrBidRequest.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.