Przetwarzanie żądania

Interakcja z określaniem stawek w czasie rzeczywistym rozpoczyna się, gdy Google wyśle do Twojej aplikacji pytanie o stawkę. Z tego przewodnika dowiesz się, jak zakodować aplikację, aby przetwarzała pytanie o stawkę.

Żądanie analizy

Google wysyła pytanie o stawkę jako zserializowany bufor protokołu dołączony jako ładunek binarny żądania POST HTTP. Pole Content-Type jest ustawione na application/octet-stream. Przykład znajdziesz w sekcji Przykładowe pytanie o stawkę.

Musisz przeanalizować to żądanie w instancji wiadomości BidRequest. Wartość BidRequest jest definiowana w elemencie realtime-bidding.proto, który można uzyskać ze strony danych referencyjnych. Wiadomość możesz przeanalizować za pomocą metody ParseFromString() w wygenerowanej klasie BidRequest. Na przykład ten kod C++ analizuje żądanie z ładunkiem POST w ciągu znaków:

string post_payload = /* the payload from the POST request */;
BidRequest bid_request;
if (bid_request.ParseFromString(post_payload)) {
  // Process the request.
}

Gdy już będziesz mieć BidRequest, możesz używać go jako obiektu, wyodrębniając i interpretując potrzebne pola. Na przykład w C++:

for (int i = 0; i < bid_request.adslot_size(); ++i) {
  const BidRequest_AdSlot& adslot = bid_request.adslot(i);
  // Decide what to bid on adslot.
}

Niektóre informacje wysyłane w funkcji BidRequest, takie jak identyfikator użytkownika Google, język czy lokalizacja geograficzna, nie zawsze są dostępne. Jeśli masz grupy reklam z kierowaniem wstępnym, które korzystają z nieznanych informacji w przypadku danego wyświetlenia, nie będą się one zgadzać. Jeśli brakujące informacje nie mają znaczenia w warunkach kierowania wstępnego, pytania o stawkę są wysyłane z pominiętymi informacjami.

Informacje o grupie reklam z kierowaniem wstępnym są dostępne w grupie MatchingAdData dla każdego elementu AdSlot. Zawiera on pierwszy pasujący identyfikator grupy reklam z kierowaniem wstępnym, która skłoniła Google do wysłania pytania o stawkę, czyli grupy reklam i kampanii, za które płacisz, gdy Twoja odpowiedź wygra aukcję dla wyświetlenia. W pewnych okolicznościach musisz wyraźnie wskazać w elemencie BidResponse.AdSlot atrybut billing_id, np. gdy BidRequest.AdSlot zawiera więcej niż 1 parametr matching_ad_data. Więcej informacji na temat ograniczeń dotyczących treści stawki znajdziesz w realtime-bidding.proto.

Pliki słownika

Pytanie o stawkę korzysta z identyfikatorów zdefiniowanych w plikach słownika, które są dostępne na stronie danych referencyjnych.

Makra adresu URL stawki

Opcjonalnie niektóre pola BidRequest można wstawić do adresu URL używanego w żądaniu POST HTTP. Jest to przydatne np. wtedy, gdy używasz prostego frontendu, który równoważy obciążenie względem wielu backendów przy użyciu wartości z żądania. Skontaktuj się z technicznym menedżerem konta, by poprosić o pomoc w zakresie nowych makr.

MakroOpis
%%GOOGLE_USER_ID%%

Zastąpione wartością google_user_id z tabeli BidRequest. Na przykład adres URL

http://google.bidder.com/path?gid=%%GOOGLE_USER_ID%%
w momencie żądania zostanie zastąpiony ciągiem znaków
http://google.bidder.com/path?gid=dGhpyBhbiBleGFtGxl
.

Jeśli identyfikator użytkownika Google jest nieznany, w miejsce automatycznie wstawiany jest pusty ciąg znaków o wyniku podobnym do

http://google.bidder.com/path?gid=
%%HAS_MOBILE%%

Zastępowane poleceniem 1 lub 0 podczas wywołania metody has_mobile() użytkownika BidRequest.

%%HAS_VIDEO%%

Zastępowana wartością 1 (prawda) lub 0 (fałsz) podczas wywoływania funkcji has_video() obiektu BidRequest.

%%HOSTED_MATCH_DATA%%

Zastąpione wartością pola hosted_match_data z BidRequest.

%%MOBILE_IS_APP%%

Zastąpione wartością 1 (prawda) lub 0 (fałsz) z pola mobile.is_app w polu BidRequest.

Znajdowanie identyfikatora aplikacji mobilnej na podstawie adresu URL transakcji

Transakcje z użyciem aplikacji mobilnych będą raportować takie adresy URL:

mbappgewtimrzgyytanjyg4888888.com

Użyj dekodera base-32 do zdekodowania pogrubionej części ciągu znaków (gewtimrzgyytanjyg4888888).

Możesz użyć dekodera online, ale musisz używać wielkich liter, a wartości 8 na końcu musisz zastąpić wartościami =.

Dekodowanie tej wartości:

GEWTIMRZGYYTANJYG4======
powoduje:
1-429610587
Ciąg 429610587 to identyfikator aplikacji na iOS iFunny.

Oto kolejny przykład. Zgłoszony adres URL to:

mbappgewtgmjug4ytmmrtgm888888.com
Dekodowanie tej wartości:
GEWTGMJUG4YTMMRTGM======
wyniki daje:
1-314716233
Wynik 314716233 to identyfikator aplikacji na iOS TextNow.

Znajdowanie nazwy aplikacji mobilnej na podstawie adresu URL transakcji

Oto przykład uzyskania nazwy aplikacji. Zgłoszony adres URL wygląda tak:

mbappMFUXELTDN5WS42DZOBQWQLTJN4XHG3DJORUGK4Q888.com
Zdekodowanie tej wartości:
MFUXELTDN5WS42DZOBQWQLTJN4XHG3DJORUGK4Q===
wyniki daje:
air.com.hypah.io.slither
Wynik odpowiada aplikacji na Androida slither.io.

Pola Otwartego ustalania stawek

Pytania o stawkę wysyłane do licytujących na giełdach i w sieci, którzy uczestniczą w Otwartym ustalaniu stawek, są podobne do pytań z usługi Authorized Buyers, które uczestniczą w standardowym określaniu stawek w czasie rzeczywistym. Klienci korzystający z Otwartego ustalania stawek otrzymają niewielką liczbę dodatkowych pól, a kilka dotychczasowych pól może mieć alternatywne zastosowania. Obejmują one:

OpenRTB Authorized Buyers; Szczegóły
BidRequest.imp[].ext.dfp_ad_unit_code BidRequest.adslot[].dfp_ad_unit_code

Zawiera kod sieci Ad Managera wydawcy, po którym następuje hierarchia jednostek reklamowych, rozdzielone ukośnikami.

Przykładowy format: /1234/cruises/mars.

BidRequest.user.data[].segment[] BidRequest.adslot[].exchange_bidding.key_value[]

Powtórzone pary klucz-wartość wysyłane od wydawcy do licytującego na giełdzie.

Możesz ustalić, że wartości są parami klucz-wartość wysyłanymi przez wydawcę, gdy BidRequest.user.data[].name ma wartość “Publisher Passed”.

Deklarowanie dozwolonych dostawców

Dostawcy technologii, którzy świadczą usługi takie jak badania, remarketing i wyświetlanie reklam, mogą odgrywać rolę w interakcji między kupującymi a sprzedawcami. Dozwolone są tylko dostawcy, którzy zostali zweryfikowani przez Google pod kątem udziału w interakcjach z Authorized Buyers.

Aby zrozumieć zasady BidRequest i utworzyć BidResponse, musisz wiedzieć, że deklarowanie dostawców technologii jest możliwe na 2 sposoby:

  1. Niektórzy dostawcy nie muszą być deklarowane. Lista ich znajdziesz w Centrum pomocy Authorized Buyers.
  2. Inni dostawcy mogą uczestniczyć w programie tylko wtedy, gdy są zadeklarowani zarówno w BidRequest, jak i w BidResponse:
    • W BidRequest pole allowed_vendor_type określa dostawców, na których zezwala sprzedawca. Dostawcy wymienieni w polu allowed_vendor_type w BidRequest są wymienieni w pliku słownika Vendors.txt.
    • W BidResponse pole vendor_type określa, z których z dozwolonych dostawców kupujący chce korzystać.

Przykładowe pytanie o stawkę

Poniższe przykłady przedstawiają czytelne dla człowieka próbki żądań Protobuf i JSON.

Google

Plik JSON OpenRTB

Protobuf OpenRTB

Aby przekonwertować pytanie o stawkę na postać binarną (tak jak w przypadku ładunku POST w rzeczywistym żądaniu), wykonaj te czynności (w języku C++). Pamiętaj, że nie dotyczy to formatu JSON OpenRTB.

string text_format_example = /* example from above */;
BidRequest bid_request;
if (TextFormat::ParseFromString(text_format_example, &bid_request)) {
  string post_payload;
  if (bid_request.SerializeToString(&post_payload)) {
    // post_payload is a binary serialization of the protocol buffer
  }
}

Remarketing

Authorized Buyers przekazuje z aplikacji mobilnej identyfikator wyświetlania reklam mobilnych w pytaniach o stawkę. Identyfikatorem wyświetlania reklam mobilnych może być IDFA na iOS lub identyfikator wyświetlania reklam w Androidzie. Wysyłany jest on za pomocą makra %%EXTRA_TAG_DATA%% w tagu JavaScript zarządzanym przez usługę Authorized Buyers.

Makro %%ADVERTISING_IDENTIFIER%% umożliwia kupującym otrzymywanie identyfikatora IDFA na iOS lub identyfikatora wyświetlania reklam na urządzeniu z Androidem podczas renderowania wyświetleń. Zwraca zaszyfrowany bufor proto MobileAdvertisingId taki jak %%EXTRA_TAG_DATA%%:

message MobileAdvertisingId {
  optional bytes advertising_id = 1;
  optional int32 user_id_type = 2;
}

user_id_type jest jedną z wartości zdefiniowanych w enum AdxMobileIdType:

enum AdxMobileIdType {
  MOBILE_ID_UNKNOWN = 0,
  IDFA = 1,
  ANDROID_ID = 2,
};

Listy użytkowników możesz tworzyć na podstawie identyfikatorów wyświetlania reklam mobilnych, korzystając z identyfikatorów wyświetlania reklam zebranych podczas renderowania wyświetleń. Listy użytkowników mogą być przechowywane na Twoim serwerze albo na naszym serwerze. Aby utworzyć listy użytkowników na serwerach Google, możesz skorzystać z naszej usługi przesyłania zbiorczego.

Gdy identyfikator wyświetlania reklam mobilnych pasuje do listy użytkowników, możesz go używać do remarketingu.

Opinie w czasie rzeczywistym

Opinie w czasie rzeczywistym są dostępne dla Authorized Buyers, a także giełd i sieci korzystających z Otwartego ustalania stawek.

Odpowiedzi na pytania o stawkę są obsługiwane w kolejnych pytaniach o stawkę zarówno w przypadku protokołów AdX, jak i OpenRTB. W przypadku OpenRTB jest on wysyłany w obrębie BidRequestExt.

Oprócz domyślnych pól wysyłanych w odpowiedzi na pytanie o stawkę możesz też wysyłać dane niestandardowe w odpowiedzi na stawkę (w AdX Proto lub OpenRTB) za pomocą metody event_notification_token zwracanej w BidResponse. event_notification_token to dowolne dane znane tylko licytującemu, które mogą pomóc w debugowaniu, np. nowy identyfikator kierowania lub identyfikator ustalania stawek reprezentujący nową taktykę albo metadane powiązane z kreacją, które są znane tylko licytującemu. Więcej informacji znajdziesz w artykule OpenRTB Protocol Buffer (Bufor protokołu OpenRTB) do RTB i AdX Proto dla AdX.

Gdy Authorized Buyers wysyła do licytującego pytanie o stawkę, licytujący odpowiada BidResponse. Jeśli licytujący ma włączone przesyłanie opinii w czasie rzeczywistym, w kolejnym pytaniu o stawkę wysyła opinię o odpowiedzi w komunikacie BidResponseFeedback, jak pokazano poniżej:

message BidResponseFeedback {
  // The unique id from BidRequest.id
  optional bytes request_id = 1;

  // The index of the BidResponse_Ad if there was more than one. The index
  // starts at zero for the first creative.
  optional int32 creative_index = 2;

  // The status code for the ad. See creative-status-codes.txt in the
  // technical documentation for a list of ids.
  optional int32 creative_status_code = 3;

  // If the bid won the auction, this is the price paid in your account
  // currency. If the bid participated in the auction but was out-bid, this
  // is the CPM that should have been exceeded in order to win. This is not
  // set if the bid was filtered prior to the auction, if the publisher or
  // winning bidder has opted out of price feedback or if your account has
  // opted out of sharing winning prices with other bidders. For first-price
  // auctions, minimum_bid_to_win is populated instead of this field.
  optional int64 cpm_micros = 4;

  // The minimum bid value necessary to have won the auction, in micros of
  // your account currency. If your bid won the auction, this is the second
  // highest bid that was not filtered (including the floor price). If your
  // bid did not win the auction, this is the winning candidate's bid. This
  // field will only be populated if your bid participated in a first-price
  // auction, and will not be populated if your bid was filtered prior to the
  // auction.
  optional int64 minimum_bid_to_win = 7;

  // The minimum bid value necessary to have won the server-side component of
  // the overall auction given that there was also an interest group bidding
  // component to the overall auction which ran using the Protected Audience
  // API. The value is expressed in CPM micros of the buyer account currency.
  // The minimum bid to win for the overall auction, including bids from the
  // server-side and the on-device interest group components, is populated in
  // the minimum_bid_to_win field of the same BidResponseFeedback object.
  optional int64 server_side_component_minimum_bid_to_win = 16;

  // Billable event rate multiplier that was applied to this bid during
  // ranking. The adjustment reflects the likelihood that your bid would
  // generate a billable event (namely, the ad renders successfully) if it won
  // the auction, relative to the probability that other bids generate a
  // billable event if they won the auction. This adjustment can be larger or
  // smaller than 1. This affects the final ranking in the auction only; in
  // particular, this multiplier does not affect the payment or whether the
  // bid clears any floor price.
  optional float billable_event_rate_bid_adjustment = 15 [default = 1];

  // When a publisher uses an RTB auction and waterfall-based SDK mediation on
  // the same query, the winner of the real-time auction must also compete in
  // a mediation waterfall (which is ordered by price) to win the impression.
  // If the bid participated in the auction and there was no waterfall, the
  // value of this field is 0. If the bid participated in the auction and
  // there was a waterfall, the value of this field is a price representing a
  // sample bid from the eligible mediation networks that were higher than the
  // auction winner, weighted by expected fill rate. This field can be used
  // in conjunction with minimum_bid_to_win to train bidding models. The CPM
  // is in micros of your account currency.
  optional int64 sampled_mediation_cpm_ahead_of_auction_winner = 10;

  // Event notification token that was included in the bid response.
  optional bytes event_notification_token = 5;

  // Buyer creative ID that was included in the bid response.
  optional string buyer_creative_id = 6;

  // Possible types of bid response feedback objects.
  enum FeedbackType {
    FEEDBACK_TYPE_UNSPECIFIED = 0;

    // Feedback for a bid that was submitted on a bid response.
    BID_FEEDBACK = 1;

    // Feedback for an interest group buyer submitted on a bid response to
    // particpate in an interest group bidding component of the auction run
    // using the Protected Audience API.
    INTEREST_GROUP_BUYER_FEEDBACK = 2;
  }

  // The type of the BidResponseFeedback message. Google will send separate
  // BidResponseFeedback objects for:
  // a) Each bid submitted on a bid response
  // b) Each buyer submitted on a bid response to particpate in an interest
  // group bidding component of the auction run using the Protected Audience
  // API.
  optional FeedbackType feedback_type = 17;

  // Origin of an interest group buyer that was included in the bid response.
  // This field is populated only for feedback where a bidder opted in an
  // interest group buyer to participate in the interest group bidding
  // component of the overall auction run using the Protected Audience API.
  // To learn more about origins, see https://www.rfc-editor.org/rfc/rfc6454.
  // To learn more about interest group bidding and the Protected Audience
  // API, see
  // https://developers.google.com/authorized-buyers/rtb/fledge-origin-trial.
  optional string buyer_origin = 18;

  // The status code for the submitted interest group buyer. This field is
  // only populated in the feedback for an interest group buyer that a bidder
  // requested to enter into the interest group auction through the bid
  // response. Individual creative status codes of bids submitted by the buyer
  // in the on-device interest group auction are not available. See
  // https://storage.googleapis.com/adx-rtb-dictionaries/interest-group-buyer-status-codes.txt
  // for a list of interest group buyer status codes.
  optional int32 interest_group_buyer_status_code = 19;
}

Pierwsze pole, które należy sprawdzić w tej wiadomości, to bid_response_feedback.creative_status_code. Znaczenie kodu znajdziesz w pliku creative-status-codes.txt. Pamiętaj, że jeśli wygrasz stawkę, możesz zrezygnować z opinii o cenach. Więcej informacji znajdziesz w artykule Jak zrezygnować.

Informacje zwrotne w czasie rzeczywistym zawierają identyfikator pytania o stawkę i jeden z tych elementów:

Wynik aukcji Opinie w czasie rzeczywistym
Kupujący nie przesłał stawki. Nic.
Kupujący przesłał stawkę, która została odfiltrowana, zanim trafiła na aukcję. Kod stanu kreacji (creative-status-codes.txt).
Kupujący przesłał stawkę, ale przegrał aukcję. Kod stanu kreacji 79 (przegrana w aukcji).
Kupujący przesłał stawkę, która wygrała aukcję. Cena rozliczeniowa i kod stanu kreacji: 1.

W przypadku wyświetlenia w aplikacji i kodu stanu kreacji o wartości 83 wydawca aplikacji mógł skorzystać z kaskady zapośredniczenia, więc zwycięska stawka konkurowałaby z innymi żądaniami w łańcuchu przebiegu zwrotnego wydawcy. Dowiedz się, jak używać właściwości sampled_mediation_cpm_ahead_of_auction_winner do ustalania stawek.

Przykład

Poniżej znajduje się przykład informacji zwrotnych przesyłanych w czasie rzeczywistym w obsługiwanych protokołach:

Google

Plik JSON OpenRTB

Protobuf OpenRTB

Tworzenie modelu ustalania stawek na potrzeby aukcji pierwszej ceny

Po ustaleniu stawki w aukcji pierwszej ceny otrzymasz informacje zwrotne w czasie rzeczywistym, w tym pola minimum_bid_to_win i sampled_mediation_cpm_ahead_of_auction_winner, jeśli stawka nie została odfiltrowana z aukcji. Sygnały te można wykorzystać do ustalania, o ile wyższa lub niższa byłaby stawka, aby wygrać wyświetlenie.

  • minimum_bid_to_win: minimalna stawka, jaką można było ustawić, aby wygrać aukcję z określaniem stawek w czasie rzeczywistym. Jeśli wygrasz aukcję, będzie to najniższa stawka, jaką można było zaoferować, a jednocześnie nadal wygrywać. Jeśli przegrasz aukcję, będzie to zwycięska stawka.
  • sampled_mediation_cpm_ahead_of_auction_winner: jeśli w łańcuchu zapośredniczenia są też inne sieci, wartość w tym polu to cena reprezentująca przykładową stawkę z jednej z odpowiednich sieci zapośredniczenia, która była wyższa niż zwycięzca aukcji i ważona według oczekiwanego współczynnika wypełnienia. Jeśli żadna z sieci w łańcuchu zapośredniczenia nie powinna wypełniać żadnej sieci lub jeśli wydawca nie korzysta z zapośredniczenia SDK, ma wartość 0.

Jak to działa

Aby opisać obliczenia użyte do określenia możliwych wartości dla funkcji minimum_bid_to_win i sampled_mediation_cpm_ahead_of_auction_winner, musimy najpierw zdefiniować:

  • Poniżej podajemy wartości CPM w łańcuchu zapośredniczenia w kolejności malejącej:
    \[C_1, C_2, …, C_n\]
  • Poniżej przedstawiono odpowiadające współczynniki wypełnienia dla CPM w łańcuchu zapośredniczenia:
    \[f_1, f_2, …, f_n\]
  • Ta funkcja służy do określania oczekiwanego CPM i prawdopodobieństwa z elementu łańcucha zapośredniczenia \(i\)na podstawie podanego współczynnika wypełnienia:
    \(X_i = \{C_i\) z prawdopodobieństwem \(f_i\); \(0\) z prawdopodobieństwem \(1 - f_i\}\)
  • Ostatni zwycięski łańcuch zapośredniczenia to:
    \[\{C_1, C_2, …, C_K, W\}\]
    gdzie \(W\) jest zwycięska stawka oraz \(C_K > W >= C_{K+1}\)
  • Cena minimalna jest oznaczona jako \(F\).
  • Stawka za drugie miejsce jest oznaczona jako \(R\).
Obliczenia dotyczące zwycięzcy aukcji
Pole Obliczenie
minimum_bid_to_win
\(max\{F, R, X_{K+1}, …, X_n\}\)
sampled_mediation_cpm_ahead_
of_auction_winner
\(\{C_i\) z prawdopodobieństwem \(\prod_{j=1}^{i-1}(1-f_j) \cdot f_i \div \prod_{j=1}^{K}(1-f_j)\}\)
Dotyczy \(1 <= i <= K\).

Obliczenia dotyczące przegranych aukcji
Pole Obliczenie
minimum_bid_to_win
\(max\{F, W\}\)
sampled_mediation_cpm_ahead_
of_auction_winner
\(max\{X_1, …, X_K\}\)

Przykład z prostym łańcuchem zapośredniczenia

Załóżmy, że wydawca używa zarówno określania stawek w czasie rzeczywistym, jak i łańcucha zapośredniczenia SDK w taki sposób:

Łańcuch zapośredniczenia SDK Oczekiwany CPM Współczynnik wypełnienia
Sieć 1 \(C_1 = $3.00\) \(f_1 = 5\%\)
Sieć 2 \(C_2 = $2.00\) \(f_2 = 45\%\)
Sieć 3 \(C_3 = $0.50\) \(f_3 = 80\%\)
Sieć 4 \(C_4 = $0.10\) \(f_4 = 85\%\)

Zakładamy, że po przeprowadzeniu aukcji RTB:

Aukcja RTB CPM
Zwycięzca aukcji (Z) 4 PLN
Z drugiej ręki (R) 0,05 USD
Cena minimalna / cena minimalna (F) 0 zł
Stawka, która wygrała aukcję

Poniżej znajdziesz przykład obliczania prawdopodobieństwa w przypadku stawki, która wygrała minimum_bid_to_win i sampled_mediation_cpm_ahead_of_auction_winner.

minimum_bid_to_win Probability,
\(max(F, R, C_3) = $0.50\) \(f_3 = 80\%\)
\(max(F, R, C_4) = $0.10\) \((1-f_3) \cdot f_4 = 17\%\)
\(max(F, R, 0) = $0.05\) \((1-f_3) \cdot (1-f_4) = 3\%\)
sampled_mediation_cpm_
ahead_of_auction_winner
Probability,
\(C_1 = $3.00\) \(f_1 \div (1-(1-f_1) \cdot (1-f_2)) =~ 10.5\%\)
\(C_2 = $2.00\) \(((1-f_1) \cdot f_2) \div (1-(1-f_1) \cdot (1-f_2)) =~ 89.5\%\)
Stawki, które przegrały aukcję

Poniżej znajduje się przykład obliczania prawdopodobieństwa w przypadku przegranych stawek minimum_bid_to_win i sampled_mediation_cpm_ahead_of_auction_winner.

minimum_bid_to_win Probability,
\(max(F, W) = $1.00\) \(100\%\)
sampled_mediation_cpm_
ahead_of_auction_winner
Probability,
\(C_1 = $3.00\) \(f_1 = 5\%\)
\(C_2 = $2.00\) \((1-f_1) \cdot f_2 =~ 42.8\%\)
\(0\) \((1-f_1) \cdot (1-f_2) =~ 52.2\%\)

Rozdzielanie stawek

Rozdzielanie stawek opisuje przetwarzanie pojedynczego złożonego elementu BidRequest na wiele pytań o stawkę, które są wysyłane do Twojej aplikacji. Ponieważ zachowują one identyczne identyfikatory (BidRequest.google_query_id w protokole RTB Authorized Buyers lub BidRequestExt.google_query_id w protokole OpenRTB), możesz ustalić, które pytania o stawkę są skorelowane po scaleniu.

Formaty reklam

Niektóre możliwości wyświetlania reklam mogą obejmować wiele formatów. W przypadku rozdzielania stawek każdy format jest wysyłany w osobnym pytaniu o stawkę, a takie atrybuty jak odpowiednie identyfikatory płatności mają związek z formatem określonym w pytaniu.

Pytania o stawkę zawierające te formaty zostaną scalone w odrębne pytania o stawkę:

  • Baner
  • Wideo
  • Audio
  • Natywna

Przykład spłaszczenia formatu reklamy

Poniżej znajduje się przykład przedstawiający uproszczone pytanie o stawkę w formacie JSON OpenRTB bez rozdzielania formatu reklamy w porównaniu z odpowiednim zestawem płaskich żądań:

Wstępnie spłaszcz

Po spłaszczeniu

Okazje

Możliwość wyświetlania reklam w przypadku danego licytującego może się odnosić nie tylko do aukcji otwartej, ale też w różnych typach umów. W przypadku umów o rozdzielaniu stawek po jednym pytaniu o stawkę w przypadku aukcji otwartej zostanie wysłane 1 pytanie o stawkę dla każdego typu umowy o stałej cenie. W praktyce ograniczenia dotyczące reklam mogą się różnić w zależności od aukcji i umów o stałej cenie. Na przykład w przypadku możliwości związanych z reklamami wideo dostępnych zarówno dla aukcji otwartej, jak i umowy o stałej cenie system licytujący będzie otrzymywać osobne pytania o stawkę w przypadku każdego z nich, gdy takie ograniczenia jak maksymalny czas trwania reklamy i dopuszczanie reklam możliwych do pominięcia mogą się różnić. W efekcie zastosowanie tej opcji do możliwości reklamowej ułatwia rozróżnianie ograniczeń dotyczących reklam w aukcjach otwartych i umowach o stałej cenie.

Maksymalny czas trwania reklamy wideo możliwej do pominięcia

Protokół Google i implementacja OpenRTB obsługują te pola dotyczące czasu trwania filmu i możliwości pominięcia:

Czas działania Czas trwania reklamy możliwej do pominięcia Możliwość pominięcia
Protokół Google max_ad_duration skippable_max_ad_duration video_ad_skippable
OpenRTB maxduration nie dotyczy skip

Oznacza to, że chociaż protokół Google może mieć szczegółowy czas trwania reklam możliwych i niemożliwych do pominięcia, implementacja OpenRTB ma tylko jedną wartość maksymalnego czasu trwania.

Przed rozdzielaniem stawek wartość maxduration OpenRTB była ustawiona na niższą wartość z pól max_ad_duration i skippable_max_ad_duration protokołu Google. Zamiast tego wysyłanie 2 osobnych pytań o stawkę w przypadku różnic między tymi wartościami: jedno oznacza atrybut maxduration w przypadku reklam możliwych do pominięcia, a drugie niemożliwe do pominięcia.

W przykładach poniżej widać, jak żądanie protokołu Google przekłada się na OpenRTB przed rozdzielaniem stawek i po nim. Odpowiednik żądania protokołu Google ma wartość max_ad_duration równą 15, a skippable_max_ad_duration o wartości 60.

Przykład max_ad_duration skip (prawda LUB fałsz)
Pierwotne żądanie bez rozdzielania 15 true
Żądanie spłaszczone 1: niemożliwe do pominięcia 15 false
Żądanie spłaszczone nr 2: reklama możliwa do pominięcia 60 true

Rozdzielanie pytań o stawkę za czas trwania reklam wideo możliwych do pominięcia odbywa się tylko wtedy, gdy są spełnione te warunki:

  • Żądanie zezwala na wideo.
  • Dozwolone są zarówno filmy z możliwością pominięcia, jak i bez pominięcia, a 2 maksymalne czasy trwania różnią się wartością.
  • To żądanie kwalifikuje się do aukcji prywatnej lub aukcji otwartej.
  • Konto licytującego ma aktywne punkty końcowe OpenRTB.

Możesz zrezygnować z tego typu rozdzielania, kontaktując się z technicznym menedżerem konta.

Bloki reklamowe wideo

Pytania o stawkę w bloku reklamowym wideo z wieloma możliwościami reklamowymi są rozdzielane tak, że każde pytanie o stawkę dotyczy pojedynczej możliwości reklamy z tego bloku reklamowego. Dzięki temu możesz ustalać stawki za wiele możliwości reklamowych w danym bloku reklamowym.

Open Measurement

Open Measurement pozwala określić dostawców zewnętrznych, którzy świadczą niezależne usługi pomiarowe i weryfikacyjne na potrzeby reklam wyświetlanych w środowiskach aplikacji mobilnych.

Aby dowiedzieć się, czy wydawca obsługuje Open Measurement w pytaniu o stawkę, sprawdź, czy możliwość wyświetlania reklamy wyklucza atrybut OmsdkType: OMSDK 1.0, który znajduje się w atrybutach kreacji możliwych do wykluczenia przez wydawcę. W przypadku protokołu Authorized Buyers znajdziesz go w sekcji BidRequest.adslot[].excluded_attribute. W przypadku protokołu OpenRTB znajduje się on w atrybucie battr Baner lub Wideo, w zależności od formatu.

Więcej informacji o interpretowaniu pytań o stawkę zawierających sygnały Open Measurement znajdziesz w artykule Pakiet SDK Open Measurement w Centrum pomocy.

Przykładowe pytania o stawkę

W sekcjach poniżej znajdziesz przykładowe pytania o stawkę w przypadku różnych typów reklam.

Baner aplikacji

Google

Plik JSON OpenRTB

Protobuf OpenRTB

Reklama pełnoekranowa w aplikacji

Google

Plik JSON OpenRTB

Protobuf OpenRTB

Pełnoekranowa reklama wideo w aplikacji

Google

Protobuf OpenRTB

Natywna w aplikacji

Google

Plik JSON OpenRTB

Protobuf OpenRTB

Film internetowy

Google

Baner w internecie mobilnym dla licytującego na giełdzie

Protobuf OpenRTB