Po przetworzeniu przez aplikację żądania stawki od Google musi ona utworzyć i wysłać odpowiedź. Z tego przewodnika dowiesz się, jak napisać kod aplikacji, aby utworzyć odpowiedź.
Tworzenie wiadomości BidResponse
Aby przesłać stawkę, aplikacja do określania stawek musi odpowiedzieć na pytanie o stawkę za pomocą BidResponse zawierającego Bid w skonfigurowanym formacie. Jeśli używasz formatu JSON, w odpowiedzi musisz ustawić nagłówek Content-Type na application/json; charset=utf-8 i w treści umieścić kod JSON BidResponse. Jeśli używasz formatu Protobuf, aplikacja musi ustawić nagłówek Content-Type na wartość application/octet-stream i uwzględnić w treści serializowany element BidResponse.
Aby utworzyć i zserializować obiekt BidResponse w formacie Protobuf, musisz wygenerować i użyć bibliotek Protobuf na podstawie plików openrtb.proto i openrtb-adx.proto, które implementują odpowiednio standardowe pola OpenRTB BidResponse i rozszerzenia Google w Protobuf. Znajdziesz je w sekcji Protokół i dane referencyjne.
Jeśli nie chcesz licytować wyświetlenia, musisz zwrócić pustą odpowiedź HTTP 204. Aplikacja musi zwracać odpowiedź na każde żądanie BidRequest. Przekroczenia limitu czasu i odpowiedzi, których nie można przeanalizować, są traktowane jako błędy, a Google ogranicza działanie licytujących z wysokim współczynnikiem błędów.
Identyfikator kreacji
Pole BidResponse w parametrze BidResponse określa kreację (limit 128 bajtów).BidResponse.seatbid.bid.crid Nawet podobne kreacje muszą mieć unikalne wartości tego pola, jeśli różnią się od siebie pod względem istotnych cech, w tym m.in. rozmiaru, zadeklarowanego adresu URL, atrybutów kreacji i typów dostawców. Innymi słowy, musisz przypisać różne identyfikatory kreacji do 2 reklam, które:
- wyglądać lub zachowywać się inaczej;
- Renderuj różne obrazy.
- wyświetlać się w różny sposób (np. jedna reklama składa się z obrazu, a druga z filmu);
Podczas projektowania aplikacji musisz wybrać systematyczny sposób generowania identyfikatorów, który będzie odpowiedni dla typów kreacji, które planujesz przesłać.
Oznaczenie reklamy
Google zaleca deklarowanie atrybutów kreacji, aby opisywać charakterystykę reklamy i jej kierowanie za pomocą kombinacji BidResponse.seatbid.bid.apis i BidResponse.seatbid.bid.attr lub rozszerzenia BidResponse.seatbid.bid.ext.attribute. Poniżej znajdziesz opis sposobu deklarowania atrybutów:
VPAIDUstaw wartośćBidResponse.seatbid.bid.apisnaVPAID_1lubVPAID_2. W przypadku formatu JSON można ustawić odpowiednio wartość1lub2.MRAIDUstawBidResponse.seatbid.bid.apisnaMRAID_1lub3w przypadku formatu JSON.SIZELESSUstawBidResponse.seatbid.bid.attrnaRESPONSIVElub18w przypadku formatu JSON.PLAYABLEWskazuje to ustawienie wartościBidResponse.seatbid.bid.attrnaUSER_INTERACTIVElub13w przypadku formatu JSON.
Więcej informacji o tym, jak uzyskać opinię na temat wykrytych właściwości kreacji, znajdziesz w tym artykule.
Pola Otwartego ustalania stawek
Odpowiedzi na stawki wysyłane przez licytujących z giełd i sieci uczestniczących w Otwartym ustalaniu stawek są podobne do odpowiedzi kupujących w Authorized Buyers uczestniczących w standardowym określaniu stawek w czasie rzeczywistym. Klienci korzystający z Otwartego ustalania stawek mogą określić niewielką liczbę dodatkowych pól, a kilka istniejących pól może mieć alternatywne zastosowania. Obejmują one:
| Pole | Szczegóły |
|---|---|
BidResponse.imp.pmp.deals.id |
Identyfikator umowy z przestrzeni nazw giełdy, który jest powiązany z tą stawką i zgłaszany wydawcom. |
BidResponse.seatbid.bid.ext.exchange_deal_type |
Typ umowy zgłaszany wydawcom, który wpływa na sposób traktowania umowy w aukcji. |
BidResponse.seatbid.bid.ext.third_party_buyer_token |
Token używany do identyfikowania informacji o kupującym zewnętrznym, jeśli wymiana jako uczestnik Otwartego ustalania stawek jest pośrednikiem. Jest ona uzyskiwana od kupującego zewnętrznego i musi być przekazywana do Google w odpowiedzi na pytanie o stawkę w niezmienionej formie. |
Rekomendacje
- Włącz na serwerach trwałe połączenia HTTPS (znane też jako „keep-alive” lub „ponowne wykorzystanie połączenia”). Ustaw limit czasu na co najmniej 10 sekund – w wielu przypadkach korzystne są wyższe wartości. Google weryfikuje to podczas wstępnych testów opóźnienia aplikacji, ponieważ Authorized Buyers wysyła żądania z dużą częstotliwością i musi unikać opóźnień związanych z nawiązywaniem osobnego połączenia TCP dla każdego żądania.
Dołącz opcjonalny link monitorujący wyświetlenia, aby śledzić, kiedy wyświetlenie jest renderowane, a nie kiedy wygrywa licytujący. Ze względu na różnicę między wygranymi a wyświetleniami zapewnia to dokładniejsze statystyki śledzenia.
- Zadbaj o to, aby kod licytującego nie był zależny od wycofanych pól, co może powodować błędy w licytacjach.
- Dołącz do
BidResponseelementyBidResponse.seatbid.bid.wiBidResponse.seatbid.bid.h. Żądanie ABidResponse, które zawiera wiele rozmiarów reklam, musi zawierać te pola. W przeciwnym razie zostanie odrzucone z aukcji. - Ogranicz rozmiar odpowiedzi do mniej niż 8 KB. Bardzo duże odpowiedzi mogą zwiększać opóźnienie sieci i powodować przekroczenie czasu oczekiwania.
- Postępuj zgodnie z wytycznymi dotyczącymi stawek w przypadku zasobów reklamowych na iOS, które wymagają atrybucji SKAdNetwork.
Przykładowa odpowiedź na pytanie o stawkę
Poniższe przykłady przedstawiają czytelne dla człowieka próbki żądań Protobuf i JSON.
OpenRTB Protobuf
OpenRTB JSON
Ważne: wiadomości Protobuf przedstawione w przykładach są tu reprezentowane jako tekst czytelny dla człowieka. Jednak wiadomości nie są wysyłane w ten sposób. W przypadku korzystania z formatu OpenRTB Protobuf akceptowane będą tylko zserializowane wiadomości BidResponse.
Możesz utworzyć i zserializować wiadomość BidResponse za pomocą tego kodu 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
}Określanie kreacji
Odpowiedź na stawkę określa kreację, która ma się wyświetlić, jeśli Twoja stawka wygra. Twoja stawka musi obejmować jeden z obsługiwanych formatów reklam (AMP, wideo, reklama natywna). W tym przykładzie określamy kreację za pomocą pola html_snippet.
Możesz też określić kreację, korzystając z jednego z tych pól w zależności od formatu reklamy:
- Reklama renderowana przez pakiet SDK
BidResponse.seatbid.bid.ext.sdk_rendered_ad
- AMP
BidResponse.seatbid.bid.amp_ad_url
- Film
BidResponse.seatbid.bid.adm
- Reklama natywna
BidResponse.seatbid.bid.adm_native
Określ reklamę hostowaną na Twoich serwerach, używając fragmentu kodu HTML w polu BidResponse.seatbid.bid.adm. Fragment kodu jest umieszczany w elemencie iframe wstawionym na stronie internetowej, co powoduje pobranie i wyświetlenie reklamy po wczytaniu strony. Musisz utworzyć fragment kodu HTML w taki sposób, aby reklama (banerowa lub pełnoekranowa) była prawidłowo renderowana w elemencie iframe i miała odpowiedni rozmiar w przypadku boksu reklamowego, w którym chcesz wyświetlać reklamy.
Dodatkowo rozmiar reklamy zadeklarowany w odpowiedzi na stawkę musi odpowiadać dokładnie jednej z kombinacji rozmiarów w pytaniu o stawkę, gdy:
- Reklama to zwykły baner (nie wideo, natywny ani pełnoekranowy).
- Licytujący zadeklarował rozmiar w odpowiedzi na stawkę. Deklaracja rozmiaru jest wymagana, gdy w żądaniu występuje więcej niż 1 rozmiar.
- Wyjątkiem są reklamy pełnoekranowe. W przypadku reklam pełnoekranowych szerokość musi wynosić co najmniej 50% szerokości ekranu, a wysokość co najmniej 40% wysokości ekranu.
Kreację z fragmentem kodu HTML możesz określić za pomocą dowolnego prawidłowego kodu HTML, który jest prawidłowo renderowany. Pamiętaj jednak o ograniczeniach dotyczących określania pola crid w sekcji Tworzenie wiadomości BidResponse.
Można go używać do umieszczania dodatkowych informacji w argumentach adresów URL, które są pobierane z serwerów w ramach renderowania reklamy. Dzięki temu możesz przekazywać dowolne dane o wyświetleniu z powrotem na własne serwery.
Większość zasad dotyczących fragmentów kodu HTML zwracanych w odpowiedziach na stawkę jest taka sama jak w przypadku reklam innych firm. Więcej informacji znajdziesz w Wytycznych programu Authorized Buyers, Wymaganiach dotyczących wyświetlania reklam firm zewnętrznych i Deklarowaniu adresów URL kliknięć w reklamach.
Określanie makr
Makra to sformatowany tekst umieszczony w niektórych polach odpowiedzi na stawkę, które zawierają adresy URL zastępowane odpowiednią wartością w momencie wyświetlania reklamy. Jeśli na przykład Twoja zwycięska stawka zawierała makro AUCTION_PRICE w fragmencie kodu HTML kreacji dołączonej do stawki, makro zostanie zastąpione wartością, którą możesz odszyfrować, aby określić kwotę zapłaconą za wyświetlenie w aukcji.
Makra możesz umieszczać w tych polach:
-
BidResponse.seatbid.bid.admMakra są obsługiwane w przypadku formatów fragmentu kodu HTML, kreacji natywnej, adresu URL filmu i pliku XML VAST wideo.
-
BidResponse.seatbid.bid.adm_native.eventtrackers.url -
BidResponse.seatbid.bid.adm_native.imptrackers -
BidResponse.seatbid.bid.ext.amp_ad_urlW przypadku kreacji AMP obsługiwane są tylko makra
WINNING_PRICEiWINNING_PRICE_ESCspecyficzne dla Google. -
BidResponse.seatbid.bid.burl -
BidResponse.seatbid.bid.ext.impression_tracking_urlUżyj tego zamiast
BidResponse.seatbid.bid.burl, jeśli potrzebujesz więcej niż 1 adresu URL rozliczeń.
Możesz na przykład umieścić makro w fragmencie kodu HTML, osadzając ${MACRO} w adresie URL używanym do pobierania kreacji, gdzie MACRO jest jednym z obsługiwanych makr opisanych w specyfikacji OpenRTB.
Makra Google
Google obsługuje dodatkowe makra poza tymi, które znajdują się w specyfikacji OpenRTB. Mają one inny format i po osadzeniu w adresie URL będą wyglądać jak %%MACRO%%. Tabela poniżej zawiera opis tych makr:
| Makro | Opis |
|---|---|
ADVERTISING_IDENTIFIER |
Umożliwia kupującym otrzymywanie identyfikatora IDFA w iOS lub identyfikatora wyświetlania reklam na Androidzie podczas renderowania wyświetlenia. Więcej informacji znajdziesz w sekcji Odszyfrowywanie identyfikatorów reklamodawców. |
CACHEBUSTER |
Ciąg znaków reprezentujący losową, nieujemną, 4-bajtową liczbę całkowitą. |
CLICK_URL_UNESC |
Docelowy URL reklamy bez zmiany znaczenia. W fragmencie kodu bezpośrednio po makrze powinna się znajdować wersja adresu URL firmy zewnętrznej do śledzenia kliknięć z zastąpionymi znakami specjalnymi. Jeśli na przykład klikany URL firmy zewnętrznej to
<a href="%%CLICK_URL_UNESC%%http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a> W momencie wyświetlania reklamy makro to jest rozwijane do postaci: <a href="http://google-click-url?...&ad_url=http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a> Adres URL najpierw zarejestruje kliknięcie w Google, a potem przekieruje użytkownika na adres URL kliknięcia firmy zewnętrznej. |
CLICK_URL_ESC |
Adres URL kliknięcia reklamy po zastosowaniu znaków ucieczki. Użyj tego zamiast
Na przykład w fragmencie kodu HTML można użyć tego kodu: <a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%"></a> W momencie wyświetlania reklamy makro to jest rozwijane do postaci: <a href="http://my.adserver.com/click?google_click_url=http://google-click- url%3F...%26ad_url%3D"></a> Spowoduje to zarejestrowanie kliknięcia w Po znaku |
CLICK_URL_ESC_ESC |
Adres URL reklamy ze zmianą znaczenia. Użyj tego zamiast Na przykład w fragmencie kodu HTML można użyć tego kodu: <a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC_ESC%%"></a> W momencie wyświetlania reklamy makro to jest rozwijane do postaci: <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 |
Rozszerzone do http:, jeśli żądanie stawki nie wymaga protokołu SSL, lub do https:, jeśli żądanie stawki wymaga protokołu SSL. |
SITE |
Domena adresu URL treści po zastosowaniu kodowania URL lub anonimowy identyfikator anonimowego asortymentu reklamowego. |
SITE_URL |
Rola wycofana. Zastąpione makrem SITE, które zapewnia identyczną funkcjonalność. |
TZ_OFFSET |
Przesunięcie strefy czasowej. |
VERIFICATION |
Różne wartości dotyczące produkcji i czasu skanowania kreacji w potoku weryfikacji. Format: Jeśli np. kreacja zawiera ciąg |
WINNING_PRICE |
Zakodowany koszt wyświetlenia (czyli CPI, a nie CPM) w mikrojednostkach waluty konta. Na przykład wygrywający CPM w wysokości 5 USD odpowiada CPM w wysokości 5 000 000 mikrojednostek lub CPI w wysokości 5000 mikrojednostek. W tym przypadku zdekodowana wartość Aby przeanalizować to makro, musisz wdrożyć aplikację, która odszyfruje potwierdzenia ceny. Więcej informacji znajdziesz na stronie Odszyfrowywanie potwierdzeń ceny. |
WINNING_PRICE_ESC |
Adres URL z kodowaniem WINNING_PRICE. |
Google wymaga, aby w kreacji reklamy wyświetlanej przez firmę zewnętrzną używać makra CLICK_URL_UNESC lub CLICK_URL_ESC. Google używa makr CLICK_URL do śledzenia kliknięć.
Zmiana znaczenia w makrach URL odbywa się według tego schematu:
- Spacja jest zastępowana znakiem plusa (
+). - Znaki alfanumeryczne (0–9, a–z, A–Z) i znaki z zestawu !()*,-./:_~ pozostają bez zmian.
- Wszystkie inne znaki są zastępowane znakiem
%XX, gdzieXXto szesnastkowa liczba reprezentująca znak.
Ograniczenia i wymagania dotyczące wydawców
Pytanie o stawkę zawiera informacje o rodzajach ograniczeń i wymagań, które wydawcy nakładają na kreacje na aukcji.
BidRequest.bcat- Możesz porównać zablokowane kategorie określone w tym polu z kategoriami wykrytymi w przypadku przesłanych kreacji za pomocą pola
detectedCategoriesinterfejsu Real-Time Bidding API.
- Możesz porównać zablokowane kategorie określone w tym polu z kategoriami wykrytymi w przypadku przesłanych kreacji za pomocą pola
BidRequest.imp.ext.allowed_vendor_typeBidRequest.imp.secure- W praktyce ta wartość będzie zawsze ustawiona na
true, ponieważ Google wymaga obsługi SSL we wszystkich kreacjach.
- W praktyce ta wartość będzie zawsze ustawiona na
BidRequest.imp.{audio/banner/native/video}BidRequest.imp.{audio/banner/native/video}.apiBidRequest.imp.{audio/banner/native/video}.battrBidRequest.imp.{audio/banner/video}.mimes
Nigdy nie licytuj reklam zawierających funkcje podlegające ograniczeniom. W przypadku dozwolonych funkcji, takich jak typ dostawcy, zwracaj reklamę tylko wtedy, gdy jej typ dostawcy znajduje się na liście allowed_vendor_type w parametrze BidRequest. W odpowiedzi na stawkę uwzględniaj tylko formaty reklam określone w pytaniu o stawkę przez wypełnienie pól takich jak BidRequest.imp.banner. Więcej informacji znajdziesz w komentarzach do tych pól w BidRequestdefinicji bufora protokołuBidRequest.
Jeśli reklama jest zwracana w BidResponse, musisz dokładnie ustawić pola BidResponse.seatbid.bid.attr, BidResponse.seatbid.bid.cat oraz BidResponse.seatbid.bid.adomain lub BidResponse.seatbid.bid.adm_native.link.url w BidResponse. Jeśli reklama ma kilka odpowiednich wartości w tych polach, musisz uwzględnić każdą z nich. Więcej informacji znajdziesz w komentarzach do tych pól w definicji bufora protokołu BidResponse.
Odpowiedzi, w których nie ustawiono tych pól, są odrzucane.
Open Measurement
Open Measurement umożliwia określanie zewnętrznych dostawców, którzy świadczą niezależne usługi pomiaru i weryfikacji reklam wyświetlanych w aplikacjach mobilnych.
Obsługiwane formaty reklam to reklamy wideo, banery i reklamy pełnoekranowe. Więcej informacji o tym, jak używać Open Measurement w odpowiedzi na reklamę zawierającej te formaty, znajdziesz w artykule w Centrum pomocy na temat pakietu Open Measurement SDK.
Przykładowe odpowiedzi na stawkę
W sekcjach poniżej znajdziesz przykładowe odpowiedzi na żądania stawek w przypadku różnych typów reklam.