Budowanie reakcji

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.protoopenrtb-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.apisBidResponse.seatbid.bid.attr lub rozszerzenia BidResponse.seatbid.bid.ext.attribute. Poniżej znajdziesz opis sposobu deklarowania atrybutów:

  • VPAID
    Ustaw wartość BidResponse.seatbid.bid.apis na VPAID_1 lub VPAID_2. W przypadku formatu JSON można ustawić odpowiednio wartość 1 lub 2.
  • MRAID
    Ustaw BidResponse.seatbid.bid.apis na MRAID_1 lub 3 w przypadku formatu JSON.
  • SIZELESS
    Ustaw BidResponse.seatbid.bid.attr na RESPONSIVE lub 18 w przypadku formatu JSON.
  • PLAYABLE
    Wskazuje to ustawienie wartości BidResponse.seatbid.bid.attr na USER_INTERACTIVE lub 13 w 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 BidResponse elementy BidResponse.seatbid.bid.wBidResponse.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ętrznychDeklarowaniu 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.adm

    Makra 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_url

    W przypadku kreacji AMP obsługiwane są tylko makra WINNING_PRICEWINNING_PRICE_ESC specyficzne dla Google.

  • BidResponse.seatbid.bid.burl

  • BidResponse.seatbid.bid.ext.impression_tracking_url

    Uż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 http://my.adserver.com/some/path/handleclick?click=clk, to po wywołaniu makra można użyć tego kodu z wersją klikanego adresu URL firmy zewnętrznej ze zmianą znaczenia:

<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 CLICK_URL_UNESC, jeśli musisz najpierw przekazać wartość przez inny serwer, który następnie zwróci przekierowanie.

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 my.adserver.com, które następnie przekieruje użytkownika na adres URL przekazany w parametrze google_click_url. Zakładamy, że my.adserver.com usuwa znaki ucieczki z parametru google_click_url.

Po znaku %%CLICK_URL_ESC%% możesz dodać adres URL z podwójnym znakiem ucieczki. Po usunięciu znaków ucieczki przez my.adserver.com do elementu google_click_url zostanie dołączona wersja adresu URL z pojedynczym znakiem ucieczki. Gdy plik google_click_url zostanie pobrany, nastąpi ponowne usunięcie znaków specjalnych, a potem przekierowanie.

CLICK_URL_ESC_ESC

Adres URL reklamy ze zmianą znaczenia. Użyj tego zamiast CLICK_URL_UNESC, jeśli musisz najpierw przekazać wartość przez inny serwer, który następnie zwróci przekierowanie.

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:%%?VERIFICATION:true-val:false-val%%, gdzie w przypadku true-valfalse-val można użyć dowolnych wartości z wyjątkiem makr, w tym pustych ciągów znaków. W przypadku aukcji otwartych zalecamy, aby giełdy używały tego makra. Gdy to zrobią, platformy po stronie popytu nie będą musiały wprowadzać zmian.

Jeśli np. kreacja zawiera ciąg %%?VERIFICATION:-1:5000%%, podczas wyświetlania nastąpi zamiana tekstu na 5000, a w procesie weryfikacji na -1. Ma to na celu odróżnienie tych 2 rodzajów pingów.

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ść WINNING_PRICE wyniesie 5000. Zwycięska cena jest podana w CPI.

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, gdzie XX to 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 detectedCategories interfejsu Real-Time Bidding API.
  • BidRequest.imp.ext.allowed_vendor_type
  • BidRequest.imp.secure
    • W praktyce ta wartość będzie zawsze ustawiona na true, ponieważ Google wymaga obsługi SSL we wszystkich kreacjach.
  • 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

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.urlBidResponse. 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.

Baner aplikacji

OpenRTB Protobuf

OpenRTB JSON

Reklama pełnoekranowa w aplikacji

OpenRTB Protobuf

OpenRTB JSON

Pełnoekranowa reklama wideo w aplikacji

OpenRTB Protobuf

OpenRTB JSON

Aplikacja natywna

OpenRTB Protobuf

OpenRTB JSON

Film internetowy

OpenRTB Protobuf

OpenRTB JSON

Baner w przeglądarce mobilnej dla oferenta giełdy

OpenRTB Protobuf

OpenRTB JSON