Budowanie reakcji

Gdy aplikacja przetworzy żądanie stawki z Google, musi utworzyć i wysłać odpowiedź. Z tego przewodnika dowiesz się, jak zakodować aplikację, aby utworzyć odpowiedź.

Tworzenie wiadomości BidResponse

Aby przesłać stawkę, aplikacja do określania stawek musi odpowiedzieć na żądanie stawki, przesyłając BidResponse zawierający Bid w skonfigurowanym formacie. Jeśli używasz formatu JSON, odpowiedź musi zawierać nagłówek Content-Type ustawiony na application/json; charset=utf-8 oraz zawierać dane JSON BidResponse w treści. Jeśli używasz formatu Protobuf, aplikacja musi ustawić nagłówek Content-Type na wartość application/octet-stream i uwzględnić serializowany ciąg znaków BidResponse w ciele żądania.

Aby utworzyć i zserializować 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 BidResponse OpenRTB i rozszerzenia Google w Protobuf. Znajdziesz je w protokołach i danych referencyjnych.

Jeśli nie chcesz ustalać stawki za wyświetlenie, musisz zwrócić pustą odpowiedź HTTP 204. Aplikacja musi zwracać odpowiedź na każde BidRequest. Przekroczenia limitu czasu i odpowiedzi, których nie można przeanalizować, są uznawane za błędy, a Google ogranicza działanie systemów licytujących o wysokim współczynniku błędów.

Identyfikator kreacji

Twój element BidResponse określa kreację za pomocą pola BidResponse.seatbid.bid.crid (limit 64 bajtów). Nawet podobne kreacje muszą mieć w tym polu unikalne wartości, jeśli różnią się między sobą pod względem jakichkolwiek istotnych cech, takich jak rozmiar, zadeklarowany URL, atrybuty kreacji czy typ dostawcy. Innymi słowy, musisz nadać różne identyfikatory kreacji dowolnym 2 reklamami, które:

  • wyglądać inaczej lub zachowywać się inaczej;
  • Renderowanie do różnych obrazów.
  • renderowanie za pomocą różnych metod (np. jedna reklama składa się z obrazu, a druga z filmu);

Podczas projektowania aplikacji należy wybrać systematyczny sposób generowania identyfikatorów, który będzie odpowiedni dla typu przesyłanych komponentów.

Oznaczenie reklamy

Google zaleca deklarowanie atrybutów kreacji, aby opisać cechy reklamy i jej kierowanie, za pomocą kombinacji atrybutów BidResponse.seatbid.bid.apisBidResponse.seatbid.bid.attr lub za pomocą 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żesz ustawić odpowiednio wartości 1 lub 2.
  • MRAID
    Ustaw wartość BidResponse.seatbid.bid.apis na MRAID_1 lub 3 w przypadku formatu JSON.
  • SIZELESS
    Ustaw wartość BidResponse.seatbid.bid.attr na RESPONSIVE lub 18 w przypadku formatu JSON.
  • PLAYABLE
    W tym celu należy ustawić wartość 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 zasobach dotyczących kreacji.

Pola Otwartego ustalania stawek

Odpowiedzi na żądanie reklamy wysyłane przez licytujących giełd i sieci uczestniczących w Otwartym ustalaniu stawek są podobne do odpowiedzi licytujących Authorized Buyers, którzy korzystają ze standardowego określania stawek w czasie rzeczywistym. Klienci korzystający z otwartego ustalania stawek mogą podać niewielką liczbę dodatkowych pól, a kilka dotychczasowych pól może mieć inne zastosowanie. Są to między innymi:

Pole Szczegóły
BidResponse.imp.pmp.deals.id

Identyfikator umowy z przestrzeni nazw giełdy powiązany z tą stawką i przekazywany wydawcom.

BidResponse.seatbid.bid.ext.exchange_deal_type

Typ umowy przekazywany wydawcom, który wpływa na sposób traktowania umowy w aukcji.

BidResponse.seatbid.bid.ext.third_party_buyer_token Token służący do identyfikowania informacji o kupującym, jeśli giełda jako uczestnik Otwartego ustalania stawek jest pośrednikiem. Wartość ta jest uzyskiwana od zewnętrznego kupującego i musi być przekazana do Google w niezmienionej postaci w odpowiedzi na pytanie o stawkę.

Rekomendacje

  • Włącz na serwerach trwałe połączenia HTTPS (zwane też „keep-alive” lub „ponownym użyciem połączenia”). Ustaw limit czasu na co najmniej 10 sekund – w wielu przypadkach korzystne są wyższe wartości. Google sprawdza to podczas początkowych testów opóźnień aplikacji, ponieważ program Authorized Buyers wysyła żądania z dużą częstotliwością i musi unikać opóźnień związanych z ustalaniem osobnego połączenia TCP dla każdego żądania.
  • Dodaj opcjonalny link monitorujący wyświetlenia, aby śledzić, kiedy wyświetlenie jest renderowane, a nie kiedy licytujący wygrywa. Ze względu na różnicę między wygranymi a wyrenderowaniami zapewnia to dokładniejsze statystyki śledzenia.

  • Upewnij się, że kod licytującego nie jest zależny od wycofanych pól, które mogą powodować błędy w ustalaniu stawek.
  • W pliku BidResponse uwzględnij właściwości BidResponse.seatbid.bid.wBidResponse.seatbid.bid.h. BidResponse do żądania zawierającego wiele rozmiarów reklam musi zawierać te pola, w przeciwnym razie zostanie wykluczone z aukcji.
  • Ogranicz rozmiar odpowiedzi do 8 K. Bardzo duże odpowiedzi mogą wydłużać czas oczekiwania na odpowiedź z sieci i powodować przekroczenie limitu czasu.
  • Postępuj zgodnie z wytycznymi dotyczącymi stawek za zasoby reklamowe na iOS, które wymagają atrybucji SKAdNetwork.

Przykładowa odpowiedź na pytanie o stawkę

Poniższe przykłady to żądania Protobuf i JSON w formie zrozumiałej dla człowieka.

OpenRTB Protobuf

OpenRTB w formacie JSON

Ważne: komunikaty Protobuf przedstawione w próbkach są tu reprezentowane jako tekst zrozumiały dla człowieka. Nie jest to jednak sposób, w jaki wiadomości są wysyłane przez sieć. W przypadku formatu OpenRTB Protobuf akceptowane są tylko serializowane wiadomości BidResponse.

Możesz utworzyć i zserializować wiadomość BidResponse, korzystając z 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 zostanie wyświetlona, jeśli stawka wygra. Twoja stawka musi obejmować jeden z obsługiwanych formatów reklam (AMP, wideo, natywny). W tym przykładzie kreację określamy za pomocą pola html_snippet.

Możesz też określić kreację za pomocą 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

Podaj reklamę hostowaną na własnych serwerach, używając fragmentu kodu HTML w polu BidResponse.seatbid.bid.adm. Fragment kodu jest umieszczony w elemencie iframe na stronie internetowej, co powoduje, że reklama jest pobierana i renderowana podczas wczytywania strony. Musisz utworzyć fragment kodu HTML, aby reklama (baner lub reklama pełnoekranowa) była prawidłowo renderowana w elemencie iframe i w odpowiednim rozmiarze do miejsca na reklamę, na które bierzesz udział w aukcji.

Dodatkowo rozmiar reklamy zadeklarowany w odpowiedzi na stawkę musi odpowiadać dokładnie jednej z kombinacji rozmiarów w pytaniu o stawkę, gdy:

  • Reklama jest zwykłym banerem (nie wideo, natywnym ani pełnoekranowym).
  • Licytujący zadeklarował rozmiar w odpowiedzi na pytanie o stawkę. Zadeklarowanie rozmiaru jest wymagane, 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.

Fragment kodu HTML kreacji możesz określić, używając dowolnego prawidłowego kodu HTML, który prawidłowo się renderuje, ale pamiętaj o ograniczeniach dotyczących pola crid w sekcji Tworzenie wiadomości BidResponse. Jednym z zastosować jest dodawanie dodatkowych informacji do argumentów adresów URL pobieranych z Twoich serwerów w ramach renderowania reklamy. Dzięki temu możesz przekazać na własne serwery dowolne dane o wyświetleniu.

Większość zasad dotyczących fragmentów kodu HTML zwracanych w odpowiedziach na żądanie stawki jest takich samych jak w przypadku reklam innych firm. Więcej informacji znajdziesz w wymaganiach dotyczących wyświetlania reklam firm zewnętrznych, wymaganiach dotyczących wyświetlania reklam firm zewnętrznych oraz deklarowaniu adresów URL w reklamach.

Określanie makr

Makra to sformatowany tekst umieszczony w niektórych polach odpowiedzi na ofertę, zawierający adresy URL, które w momencie wyświetlania reklamy są zastępowane odpowiednimi wartościami. Jeśli na przykład zwycięska stawka zawierała makro AUCTION_PRICE w kreacji fragmentu kodu HTML dołączonej do stawki, makro zostanie zastąpione wartością, którą możesz odszyfrować, aby określić kwotę, jaką zapłaciłeś/zapłaciłaś 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, natywnego, adresu URL wideo i wideo VAST XML.

  • 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 do płatności.

Możesz np. umieścić makro w fragmentie kodu HTML, umieszczając w adresie URL używanym do pobierania kreacji makro ${MACRO}, gdzie MACRO to jedno z obsługiwanych makro opisanych w specyfikacji OpenRTB.

Makra Google

Google obsługuje dodatkowe makropolecenia oprócz tych, które znajdują się w specyfikacji OpenRTB. Mają one inny format i wyglądają jak %%MACRO%%, jeśli są osadzone w adresie URL. Tabela poniżej opisuje te makro:

Makro Opis
ADVERTISING_IDENTIFIER Umożliwia kupującym otrzymywanie identyfikatora IDFA w iOS lub identyfikatora wyświetlania reklam (AdID) w Androidzie podczas renderowania wyświetlenia. Szczegółowe informacje znajdziesz w artykule Odszyfrowywanie identyfikatorów reklamodawcy.
CACHEBUSTER Ciąg znaków przedstawiający losową, bezznakową liczbę całkowitą o czterech bajtach.
CLICK_URL_UNESC

Nieprzetworzony adres URL kliknięcia reklamy. W fragmentach kodu bezpośrednio po makrze powinna znajdować się ujęta w znaki ucieczki wersja adresu URL kliknięcia firmy zewnętrznej.

Jeśli np. klikany URL firmy zewnętrznej tohttp://my.adserver.com/some/path/handleclick?click=clk, możesz użyć tego kodu z jednokrotnie ujętą wersją klikanego adresu URL firmy zewnętrznej po wywołaniu makra:

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

W momencie wyświetlania reklamy ta wartość jest rozszerzana do:

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

Adres URL najpierw rejestruje kliknięcie w Google, a potem przekierowuje do adresu URL kliknięcia należącego do firmy zewnętrznej.

CLICK_URL_ESC

Ucieczka adresu URL kliknięcia reklamy. Użyj tego zamiast CLICK_URL_UNESC, jeśli musisz najpierw przekazać wartość przez inny serwer, który zwróci przekierowanie.

W fragmentach kodu HTML można na przykład użyć tego kodu:

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

W momencie wyświetlania reklamy wartość ta jest rozszerzana do:

<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 usługach my.adserver.com, które będą następnie odpowiedzialne za przekierowanie do adresu URL przekazanego w parametrze google_click_url. Zakładamy, że funkcja my.adserver.com odkodowuje parametr google_click_url.

Po znaku %%CLICK_URL_ESC%% możesz dołączyć adres URL z podwójnym ucieczką. Po odkodowaniu przez my.adserver.com pozostaje wersja adresu URL ze zmianą znaczenia dołączona do google_click_url. Gdy zostanie pobrany parametr google_click_url, zostanie on ponownie ujęty w znaki ucieczki, a następnie nastąpi przekierowanie.

CLICK_URL_ESC_ESC

Podwójnie ujęty w znaki cudzysłowe adres URL reklamy. Użyj tego zamiast CLICK_URL_UNESC, jeśli musisz najpierw przekazać wartość przez inny serwer, który zwróci przekierowanie.

W fragmentach kodu HTML można na przykład użyć tego kodu:

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

W momencie wyświetlania reklamy ta wartość jest rozszerzana do:

<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 Rozwinięte do http:, jeśli żądanie stawki nie wymaga protokołu SSL, lub do https:, jeśli żądanie stawki wymaga protokołu SSL.
SITE Domena z ucieczkami znaków w adresie URL treści lub anonimowy identyfikator w przypadku anonimowego asortymentu.
SITE_URL Rola wycofana. Zastąpione przez makro SITE, które zapewnia identyczną funkcjonalność.
TZ_OFFSET przesunięcie strefy czasowej.
VERIFICATION

Różne wartości w przypadku produkcji i skanowania kreacji w procesie weryfikacji. Format: %%?VERIFICATION:true-val:false-val%%, gdzie w przypadku parametrów true-valfalse-val można użyć dowolnych wartości (z wyjątkiem makr), w tym pustych ciągów znaków. W przypadku określania stawek w aukcjach otwartych zalecamy, aby giełdy używały tego makra. Po jego użyciu platformy po stronie popytu nie muszą wprowadzać zmian.

Jeśli np. kreacja zawierałaby tekst %%?VERIFICATION:-1:5000%%, w ramach procesu weryfikacji tekst zastępczy będzie miał postać 5000 w przypadku wyświetlania i -1 w przypadku ścieżki weryfikacji. Ma to ułatwić odróżnienie tych 2 zbiorów danych.

WINNING_PRICE

Koszt zakodowanego wyświetlenia (czyli CPI, a nie CPM) w mikroach waluty konta. Na przykład wygrany CPM w wysokości 5 USD odpowiada CPM w wysokości 5 000 000 milionowych części jednostki lub CPI w wysokości 5 000 milionowych części jednostki. Odkodowana wartość WINNING_PRICE w tym przypadku wynosiłaby 5000. Cena zwycięska jest określana w CPI.

Aby przeanalizować to makro, musisz zaimplementować aplikację, która odszyfrowuje potwierdzenia cen. Więcej informacji znajdziesz na stronie Odszyfrowywanie potwierdzenia ceny.

WINNING_PRICE_ESC WINNING_PRICE z escapowaniem w adresie URL.

Google wymaga, aby w kreacji reklamy obsługiwanej przez firmę zewnętrzną używać makra CLICK_URL_UNESC lub CLICK_URL_ESC. Google używa makro CLICK_URL do śledzenia kliknięć.

Makra używają ucieczki w adresach URL zgodnie z tym schematem:

  • Znak odstępu jest zastępowany znakiem plusa (+).
  • Znaki alfanumeryczne (0–9, a–z, A–Z) i znaki z zestawu !()*,-./:_~ pozostają niezmienione.
  • Wszystkie inne znaki są zastępowane przez %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 narzucają kreacjom w aukcji.

  • BidRequest.bcat
    • Możesz porównać zablokowane kategorie określone w tym polu z kategoriami wykrytymi w przesłanych kreacjach za pomocą pola detectedCategories w interfejsie Real-time Bidding API.
  • BidRequest.imp.ext.allowed_vendor_type
  • BidRequest.imp.secure
    • W praktyce zawsze będzie to wartość true, ponieważ Google wymaga obsługi protokołu 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 reklamy zawierającej funkcję podlegającą ograniczeniom. W przypadku dozwolonych funkcji, takich jak typ dostawcy, zwracaj reklamę tylko wtedy, gdy typ dostawcy znajduje się na liście allowed_vendor_type w sekcji BidRequest. W stawce powinny być uwzględnione tylko formaty reklam określone w pytaniu o stawkę przez wypełnienie pól takich jak BidRequest.imp.banner. Aby dowiedzieć się więcej, zapoznaj się z komentarzami dotyczącymi tych pól w definicji bufora protokołu BidRequest.

Jeśli reklama jest zwracana w BidResponse, musisz prawidłowo 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 wiele wartości w tych polach, musisz uwzględnić wszystkie wartości. Więcej informacji znajdziesz w opisach tych pól w definicji bufora protokołu BidResponse. Odpowiedzi, w których nie ma tych pól, są odrzucane.

Open Measurement

Open Measurement umożliwia określenie zewnętrznych dostawców, którzy zapewniają niezależne usługi pomiarowe i weryfikacyjne w przypadku reklam wyświetlanych w środowiskach aplikacji mobilnych.

Obsługiwane formaty reklam to reklamy wideo, banery i reklamy pełnoekranowe. Więcej informacji o używaniu pakietu Open Measurement w odpowiedzi na zapytanie o stawkę zawierającej te formaty znajdziesz w artykule w Centrum pomocy poświęconym pakietowi Open Measurement SDK.

Przykładowe odpowiedzi na stawkę

W następnych sekcjach znajdziesz przykładowe odpowiedzi na żądanie stawki w przypadku różnych typów reklam.

Baner aplikacji

OpenRTB Protobuf

OpenRTB w formacie JSON

Reklama pełnoekranowa w aplikacji

OpenRTB Protobuf

OpenRTB w formacie JSON

Pełnoekranowa reklama wideo w aplikacji

OpenRTB Protobuf

OpenRTB w formacie JSON

Aplikacja natywna

OpenRTB Protobuf

OpenRTB w formacie JSON

Film internetowy

OpenRTB Protobuf

OpenRTB w formacie JSON

Baner internetowy na urządzenia mobilne dla licytujących na giełdzie

OpenRTB Protobuf

OpenRTB w formacie JSON