Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
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 Protobuf BidResponse
Program Authorized Buyers wysyła BidRequest jako treść wiadomości HTTP POST. Jeśli punkt końcowy określania stawek jest skonfigurowany pod kątem używania formatu Protobuf, aplikacja musi wysłać odpowiedź z nagłówkiem Content-Type ustawionym na application/octet-stream oraz z tekstem wiadomości zawierającym serializowany bufor protokołu. Bufor protokołu to wiadomość BidResponse zgodnie z definicją w dokumentacji openrtb.proto. Aplikacja musi zwracać możliwą do przeanalizowania wartość BidResponse w odpowiedzi na każde BidRequest. Przekroczenie limitu czasu i odpowiedzi, których nie można przeanalizować, są uznawane za błędy, a Google ogranicza udział licytujących o wysokim współczynniku błędów.
Jeśli nie chcesz ustalać stawki za wyświetlenie, musisz zwrócić pustą odpowiedź HTTP 204. Dane openrtb.proto możesz pobrać na stronie danych referencyjnych.
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. Inaczej mówiąc, musisz nadać różne identyfikatory kreacji dowolnym 2 reklamami, które:
wyglądać 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 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 m.in.:
OpenRTB
Authorized Buyers.
Szczegóły
BidResponse.imp[].pmp.deals[].id
BidResponse.ad[].adslot[].exchange_deal_id
Identyfikator umowy z przestrzeni nazw giełdy powiązany z tą stawką i przekazywany wydawcom.
Token służący do identyfikowania informacji o kupującym, jeśli giełda jako uczestnik Otwartego ustalania stawek jest pośrednikiem. Wartość tę uzyskuje się od zewnętrznego kupującego i należy ją przekazać 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 uzyskujesz 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.
Dodaj właściwości BidResponse.seatbid.bid.w i BidResponse.seatbid.bid.h do pliku BidResponse. BidResponse do żądania zawierającego różne rozmiary reklam musi zawierać te pola, w przeciwnym razie zostanie wykluczone z aukcji.
Ogranicz rozmiar odpowiedzi do 8 K. Bardzo duże odpowiedzi mogą zwiększać czas oczekiwania na odpowiedź z sieci i powodować przekroczenie czasu oczekiwania.
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 korzystania z formatu Protobuf Google lub OpenRTB 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 zawierać 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.
Kreację fragmentu kodu HTML 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 umieszczanie dodatkowych informacji w argumentach 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.
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 uwzględniać w tych polach:
BidResponse.seatbid.bid.adm
Makra są obsługiwane w przypadku fragmentów kodu HTML, formatów natywnych, adresów URL wideo i formatu XML VAST.
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 RTB
Google obsługuje dodatkowe makropolecenia oprócz tych, które znajdują się w specyfikacji OpenRTB. Są one sformatowane inaczej i będą wyglądać tak:%%MACRO%%, jeśli zostaną umieszczone 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
Niezmodyfikowany 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ć kodu z jednokrotnym backslashem w klikanym adresie URL firmy zewnętrznej po wywołaniu makra:
Adres URL najpierw rejestruje kliknięcie w Google, a potem przekierowuje do adresu URL kliknięcia należącego do osoby trzeciej.
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:
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 dekoduje 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łowu 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ć takiego kodu:
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 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 systemie weryfikacji. Format:
%%?VERIFICATION:true-val:false-val%%, gdzie w przypadku parametrów true-val i false-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. Pomoże to odróżnić te 2 zbiory pingów.
WINNING_PRICE
Koszt zakodowanego wyświetlenia (czyli CPI, a nie CPM) w mikrosach 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 podawana 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 w formie ucieczki składni 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 nakładają na kreacje 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 interfejsu 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.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.
id:"96Z599PGNvp7Mr99138Fm0"seatbid{bid{id:"NQb32Ge7Rtt84wFn2p8"impid:"1"price:0.153584adid:"test_creative_id_272596"adomain:"google.com"crid:"test_creative_id_272596"cat:"IAB13-7"burl:"https://test.com/imp?id=123456"adm_native{ver:"1.2"assets{id:1required:truetitle{text:"Luxury Mars Cruises"}}assets{id:2required:truedata{value:"Visit the planet in a luxury spaceship."}}assets{id:3required:falsedata{value:"Book today"}}assets{id:4required:truedata{value:"Galactic Luxury Cruises"}}assets{id:5required:trueimg{url:"https://native.test.com/image?id=123456"w:1200h:627}}link{url:"https://www.google.com"}eventtrackers{event:IMPRESSIONmethod:IMGurl:"https://test.com/event?id=123456"}privacy:"https://adssettings.google.com/whythisad?source=display&reasons=OMITTED"}[com.google.doubleclick.bid]{ad_choices_destination_url:"https://test.com/preferences"billing_id:29846056590dsa{behalf:"TEST_ADVERTISER"paid:"TEST_PAYING_ENTITY"adrender:false}}}bid{id:"4vwb23qm6iqU6w6G978"impid:"1"price:0.153584adid:"test_creative_id_272596"adomain:"google.com"crid:"test_creative_id_272596"cat:"IAB21"burl:"https://test.com/imp?id=123456"adm_native{ver:"1.2"assets{id:1required:truetitle{text:"Luxury Mars Cruises"}}assets{id:2required:truedata{value:"Visit the planet in a luxury spaceship."}}assets{id:3required:falsedata{value:"Book today"}}assets{id:4required:truedata{value:"Galactic Luxury Cruises"}}assets{id:5required:trueimg{url:"https://native.test.com/image?id=123456"w:1200h:627}}link{url:"https://www.google.com"}eventtrackers{event:IMPRESSIONmethod:IMGurl:"https://test.com/event?id=123456"}privacy:"https://adssettings.google.com/whythisad?source=display&reasons=OMITTED"}[com.google.doubleclick.bid]{ad_choices_destination_url:"https://test.com/preferences"dsa{behalf:"TEST_ADVERTISER"paid:"TEST_PAYING_ENTITY"adrender:false}}}seat:"4528:1161:591635"group:false}bidid:"hgu4ev7j-ZK929XM0-79f7-0A23O0VN2CFC"cur:"USD"
OpenRTB w formacie JSON
Pokaż przykład
{"id":"96Z599PGNvp7Mr99138Fm0","seatbid":[{"bid":[{"id":"NQb32Ge7Rtt84wFn2p8","impid":"1","price":0.153584,"adid":"test_creative_id_272596","adomain":["google.com"],"crid":"test_creative_id_272596","cat":["IAB13-7"],"burl":"https://test.com/imp?id=123456","ext":{"ad_choices_destination_url":"https://test.com/preferences","billing_id":"29846056590","dsa":{"behalf":"TEST_ADVERTISER","paid":"TEST_PAYING_ENTITY","adrender":0}},"adm":"{\"ver\":\"1.2\",\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"text\":\"Luxury Mars Cruises\"}},{\"id\":2,\"required\":1,\"data\":{\"value\":\"Visit the planet in a luxury spaceship.\"}},{\"id\":3,\"required\":0,\"data\":{\"value\":\"Book today\"}},{\"id\":4,\"required\":1,\"data\":{\"value\":\"Galactic Luxury Cruises\"}},{\"id\":5,\"required\":1,\"img\":{\"url\":\"https://native.test.com/image?id=123456\",\"w\":1200,\"h\":627}}],\"link\":{\"url\":\"https://www.google.com\"},\"eventtrackers\":[{\"event\":1,\"method\":1,\"url\":\"https://test.com/event?id=123456\"}],\"privacy\":\"https://adssettings.google.com/whythisad?source=display&reasons=OMITTED\"}"},{"id":"4vwb23qm6iqU6w6G978","impid":"1","price":0.153584,"adid":"test_creative_id_272596","adomain":["google.com"],"crid":"test_creative_id_272596","cat":["IAB21"],"burl":"https://test.com/imp?id=123456","ext":{"ad_choices_destination_url":"https://test.com/preferences","dsa":{"behalf":"TEST_ADVERTISER","paid":"TEST_PAYING_ENTITY","adrender":0}},"adm":"{\"ver\":\"1.2\",\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"text\":\"Luxury Mars Cruises\"}},{\"id\":2,\"required\":1,\"data\":{\"value\":\"Visit the planet in a luxury spaceship.\"}},{\"id\":3,\"required\":0,\"data\":{\"value\":\"Book today\"}},{\"id\":4,\"required\":1,\"data\":{\"value\":\"Galactic Luxury Cruises\"}},{\"id\":5,\"required\":1,\"img\":{\"url\":\"https://native.test.com/image?id=123456\",\"w\":1200,\"h\":627}}],\"link\":{\"url\":\"https://www.google.com\"},\"eventtrackers\":[{\"event\":1,\"method\":1,\"url\":\"https://test.com/event?id=123456\"}],\"privacy\":\"https://adssettings.google.com/whythisad?source=display&reasons=OMITTED\"}"}],"seat":"4528:1161:591635","group":0}],"bidid":"hgu4ev7j-ZK929XM0-79f7-0A23O0VN2CFC","cur":"USD"}
ad{adslot{id:1max_cpm_micros:158000billing_id:41106584355deal_id:1}click_through_url:"google.com"attribute:70buyer_creative_id:"test_creative_id_251451"advertiser_name:"Google"native_ad{headline:"Luxury Mars Cruises"body:"Visit the planet in a luxury spaceship."call_to_action:"Book today"advertiser:"Galactic Luxury Cruises"image{url:"https://native.test.com/image?id=123456"width:1200height:222}app_icon{url:"https://native.test.com/icon?id=123456"width:512height:512}star_rating:4.300000190734863click_link_url:"https://www.google.com"}impression_tracking_url:"https://test.com/imp?id=123456"impression_tracking_url:"https://test.com/imp?id=123456"event_notification_token:"token"skadn{version:"4.0"network:"l6x39K4z"itunesitem:"731305960"sourceapp:"627009739"fidelities{fidelity_type:STOREKIT_RENDERED_ADSnonce:"9216faff-74a9-4b35-badc-66878c35f67c"timestamp:1728975919221signature:"b0USXkmg02Q3v6p301kYOHG36CCOWWdEo52RHRttB9t8PTNi79qL17E4D6h7UeUSuq479oTK13G2Ev34MJlU86C5vY1SMVw2"}fidelities{fidelity_type:VIEW_THROUGH_ADSnonce:"9216faff-74a9-4b35-badc-66878c35f67c"timestamp:1728975919221signature:"4Cf4NH6239z9f3wa8j6420Z7H0UISYxyxN5720444dkq6457I5FY0Jg8bk1xge2P8YgiDp74l2738136v2g1A8D50331IRm0"}source_identifier:1}click_tracking_urls:"https://google.com/rtb/click?imp_id=55d2112c-4947-4da5-bc37-b79ebf4577dd"advertised_app_id:"APP_ID_OMITTED"app_promotion_type:INSTALLS}processing_time_ms:63
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 2025-03-07 UTC."],[[["Bid responses must be serialized `BidResponse` protocol buffers with the `Content-Type` header set to `application/octet-stream` for Protobuf, and a parsable `BidResponse` is required for each `BidRequest`, while an empty HTTP 204 response signals no bid."],["Each creative needs a unique `crid` (creative ID) limited to 64 bytes, and this ID must be unique across creatives if there are differences in size, declared URL, attributes, vendor types, appearance, behavior, or rendering method."],["Ad characteristics should be declared using `BidResponse.seatbid.bid.apis`, `BidResponse.seatbid.bid.attr`, or `BidResponse.seatbid.bid.ext.attribute`, with specific values indicating VPAID, MRAID, SIZELESS, or PLAYABLE attributes, respectively, and additional attributes from `buyer-declarable-creative-attributes.txt`."],["Responses should remain under 8KB, utilize persistent HTTPS connections with at least a 10-second timeout, and employ `BidResponse.seatbid.bid.burl` or `BidResponse.seatbid.bid.ext.impression_tracking_url` for tracking impressions."],["The `BidResponse` must accurately set creative attributes (`BidResponse.seatbid.bid.attr`), categories (`BidResponse.seatbid.bid.cat`), and advertiser domain (`BidResponse.seatbid.bid.adomain`) or native ad link (`BidResponse.seatbid.bid.adm_native.link.url`), as responses lacking these are discarded."]]],["Applications must respond to each `BidRequest` with a parsable `BidResponse`, using Protobuf or an HTTP 204 for no bids. Creatives are identified by a unique `crid`. Ad attributes, such as VPAID and MRAID, are declared in specific fields. Utilize impression tracking URLs and avoid deprecated fields. Open Bidding bid responses are similar to Authorized Buyers. Ad sizes in the response must match the request. Macros are used in URLs. Publisher requirements are specified in the `BidRequest`. The response must accurately reflect these requirements and provide the accurate ad attributes and links.\n"]]