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.proto i openrtb-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.apis
i BidResponse.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
naVPAID_1
lubVPAID_2
. W przypadku formatu JSON możesz ustawić odpowiednio wartości1
lub2
.MRAID
Ustaw wartośćBidResponse.seatbid.bid.apis
naMRAID_1
lub3
w przypadku formatu JSON.SIZELESS
Ustaw wartośćBidResponse.seatbid.bid.attr
naRESPONSIVE
lub18
w przypadku formatu JSON.PLAYABLE
W tym celu należy ustawić wartośćBidResponse.seatbid.bid.attr
naUSER_INTERACTIVE
lub13
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ściBidResponse.seatbid.bid.w
iBidResponse.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_PRICE
iWINNING_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 to <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 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 Po znaku |
CLICK_URL_ESC_ESC |
Podwójnie ujęty w znaki cudzysłowe adres URL reklamy. Użyj tego zamiast 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:
Jeśli np. kreacja zawierałaby tekst |
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ść 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
, gdzieXX
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.
- Możesz porównać zablokowane kategorie określone w tym polu z kategoriami wykrytymi w przesłanych kreacjach za pomocą pola
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.
- W praktyce zawsze będzie to wartość
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.url
w BidResponse
. 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.