После того как ваше приложение обработает запрос ставки от Google, оно должно сформировать и отправить ответ. В этом руководстве объясняется, как написать код приложения для создания ответа.
Создать сообщение Protobuf BidResponse
Авторизованные покупатели отправляют BidRequest
как тело сообщения HTTP POST
. Если ваша конечная точка назначения ставок настроена на использование формата Protobuf, ваше приложение должно отправить ответ с заголовком Content-Type
установленным в application/octet-stream
, и телом сообщения, состоящим из сериализованного буфера протокола. Буфер протокола — это сообщение BidResponse
, определенное в openrtb.proto
. Ваше приложение должно возвращать анализируемый BidResponse
в ответ на каждый BidRequest
. Тайм-ауты и ответы, которые невозможно проанализировать, считаются ошибками, и Google ограничивает участников торгов с высоким уровнем ошибок.
Если вы не хотите делать ставку за показ, вы можете указать только поле BidResponse.ext.processing_time_ms
и оставить все остальные поля пустыми. Вы можете получить openrtb.proto
со страницы справочных данных .
Идентификатор объявления
В вашем BidResponse
креатив указывается в поле BidResponse.seatbid.bid.crid
(ограничение в 64 байта). Даже похожие креативы должны иметь уникальные значения для этого поля, если они отличаются по каким-либо заметным характеристикам, включая, помимо прочего: размер, заявленный URL-адрес, атрибуты креатива и типы поставщиков. Другими словами, вы должны присвоить разные идентификаторы объявлений любым двум объявлениям, которые:
- Выглядите или ведите себя по-другому.
- Рендеринг различных изображений.
- Рендеринг разными способами (например, одно объявление состоит из изображения, а другое — из видео).
При разработке приложения вам следует выбрать систематический способ создания идентификаторов, которые будут иметь смысл для типов объявлений, которые вы планируете отправлять.
Атрибуты объявления
Google рекомендует объявлять атрибуты креатива для описания характеристик вашего объявления и его таргетинга, используя либо комбинацию BidResponse.seatbid.bid.apis
и BidResponse.seatbid.bid.attr
, либо расширение BidResponse.seatbid.bid.ext.attribute
. Ниже описано, как можно объявлять атрибуты:
-
VPAID
Установите дляBidResponse.seatbid.bid.apis
значениеVPAID_1
илиVPAID_2
. Для формата JSON это значение может быть установлено равным1
или2
соответственно. -
MRAID
Установите дляBidResponse.seatbid.bid.apis
значениеMRAID_1
или3
для формата JSON. -
SIZELESS
Установите дляBidResponse.seatbid.bid.attr
RESPONSIVE
или18
для формата JSON. -
PLAYABLE
На это указывает установка дляBidResponse.seatbid.bid.attr
значенияUSER_INTERACTIVE
или13
для формата JSON.
См . ресурс «Креативы» , чтобы узнать, как получить отзыв об обнаруженных свойствах ваших креативов.
Открытые поля ставок
Ответы на запросы ставок, отправляемые биржевыми и сетевыми участниками торгов, участвующими в Open Bidding, аналогичны ответам Авторизованных покупателей, участвующих в стандартных торгах в режиме реального времени. Клиенты Open Bidding могут указать небольшое количество дополнительных полей, а некоторые существующие поля могут использоваться альтернативно. К ним относятся следующие:
OpenRTB | Авторизованные покупатели | Подробности |
---|---|---|
BidResponse.imp[].pmp.deals[].id | BidResponse.ad[].adslot[].exchange_deal_id | Идентификатор сделки из пространства имен биржи, связанный с этой ставкой и сообщаемый издателям. |
BidResponse.seatbid[].bid[].ext.exchange_deal_type | BidResponse.ad[].adslot[].exchange_deal_type | Тип сделки, о которой сообщается издателям, влияет на то, как сделка будет рассматриваться на аукционе. |
BidResponse.seatbid[].bid[].ext.third_party_buyer_token | BidResponse.ad[].adslot[].third_party_buyer_token | Токен, используемый для идентификации информации о конечном конечном покупателе, если биржа в качестве участника Open Bid является посредником. Эти данные получены от стороннего покупателя и должны быть переданы в Google в неизмененном виде в ответе на запрос ставки. |
Рекомендации
- Включите постоянные соединения HTTPS (также известные как «поддержание активности» или «повторное использование соединения») на своих серверах. Установите тайм-аут как минимум на 10 секунд — во многих случаях полезны более высокие значения. Google проверяет это во время начальных тестов задержки вашего приложения, поскольку Авторизованные покупатели отправляют запросы с высокой скоростью и им необходимо избегать накладных расходов на задержку, связанных с установкой отдельного TCP-соединения для каждого запроса.
Включите дополнительный URL-адрес отслеживания показов, чтобы отслеживать, когда показ выполняется, а не когда выигрывает система назначения ставок. Из-за разницы между победами и рендерингами это дает более точную статистику отслеживания.
- В коде системы назначения ставок не должно быть зависимостей от устаревших полей , поскольку это может привести к тому, что ваши ставки будут отклонены с ошибками.
- Включите
BidResponse.seatbid.bid.w
иBidResponse.seatbid.bid.h
в свойBidResponse
.BidResponse
на запрос ставки, включающий несколько размеров объявлений, должен включать эти поля, иначе он будет исключен из аукциона. - Ограничьте размер ответа до 8 КБ. Очень большие ответы могут увеличить задержку сети и привести к тайм-аутам.
- Следуйте рекомендациям по ставкам на инвентарь iOS, требующий атрибуции SKAdNetwork .
Пример ответа на заявку
Следующие примеры представляют собой удобочитаемые образцы запросов Protobuf и JSON.
OpenRTB Протобуф
OpenRTB JSON
Важно: Сообщения Protobuf, изображенные в примерах, представлены здесь в виде удобочитаемого текста. Однако сообщения передаются по проводам не так. При использовании формата Google или OpenRTB Protobuf принимаются только сериализованные сообщения BidResponse.
Вы можете создать и сериализовать сообщение BidResponse
используя следующий код 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 }
Укажите креатив
В вашем ответе на ставку указывается креатив, который будет показан в случае победы вашей ставки. Ваша ставка должна включать один из поддерживаемых форматов объявлений (AMP, видео, нативный). В этом примере мы указываем креатив, используя поле html_snippet
.
Кроме того, вы можете указать свой креатив, используя одно из следующих полей в зависимости от формата объявления:
- Объявление, обработанное SDK
-
BidResponse.seatbid.bid.ext.sdk_rendered_ad
-
- AMP
-
BidResponse.seatbid.bid.amp_ad_url
-
- Видео
-
BidResponse.seatbid.bid.adm
-
- Родной
-
BidResponse.seatbid.bid.adm_native
-
Укажите объявление, которое будет размещено на вашем собственном сервере(ах), используя фрагмент HTML в поле BidResponse.seatbid.bid.adm
. Фрагмент заключен в iFrame, вставленный в веб-страницу, в результате чего объявление извлекается и отображается при загрузке страницы. Вам необходимо создать фрагмент HTML так, чтобы объявление (баннер или межстраничное объявление) правильно отображалось внутри iFrame и имело размер, соответствующий рекламному месту, на которое вы делаете ставку.
Кроме того, размер объявления, заявленный в ответе на заявку, должен совпадать ровно с одной из комбинаций размеров в запросе ставки, если:
- Объявление представляет собой обычный баннер (не видео, нативный или межстраничный).
- Участник торгов указал размер в ответе на заявку. Объявление размера требуется всякий раз, когда в запросе присутствует более одного размера.
- Исключение сделано для межстраничной рекламы. Ширина межстраничных объявлений должна составлять не менее 50 % ширины экрана, а высота — не менее 40 % высоты экрана.
Вы можете указать креативный фрагмент HTML, используя любой действительный HTML-код, который отображается правильно, но помните об ограничениях на указание поля crid
в разделе сообщения Create BidResponse . Одним из вариантов использования этого является добавление дополнительной информации в аргументы URL-адресов, которые получаются с ваших серверов в рамках отображения рекламы. Это позволяет вам передавать произвольные данные о показе обратно на ваши собственные серверы.
Большинство правил для HTML-фрагментов, возвращаемых в ответах на запросы ставок, такие же, как и для сторонних объявлений. Дополнительные сведения см. в правилах программы «Авторизованные покупатели» , «Требования к показу сторонних объявлений » и «Объявление URL-адресов перехода по клику в объявлениях» .
Укажите макросы
Макросы – это форматированный текст, встроенный в некоторые поля ответа на запрос ставки и содержащий URL-адреса, которые заменяются соответствующим значением во время показа объявления. Например, если ваша выигравшая ставка включала макрос AUCTION_PRICE
во фрагмент объявления HTML, включенный в вашу ставку, макрос будет заменен значением, которое вы можете расшифровать, чтобы определить сумму, которую вы заплатили за показ на аукционе.
Вы можете включить макросы в следующие поля:
BidResponse.seatbid.bid.adm
Макросы поддерживаются для фрагментов HTML, собственных форматов, URL-адресов видео и XML-форматов VAST для видео.
BidResponse.seatbid.bid.adm_native.eventtrackers.url
BidResponse.seatbid.bid.adm_native.imptrackers
BidResponse.seatbid.bid.ext.amp_ad_url
Для креативов AMP поддерживаются только макросы
WINNING_PRICE
иWINNING_PRICE_ESC
специфичные для Google.BidResponse.seatbid.bid.burl
BidResponse.seatbid.bid.ext.impression_tracking_url
Используйте его вместо
BidResponse.seatbid.bid.burl
, если вам требуется более одного URL-адреса для выставления счетов.
Например, вы можете включить макрос как часть фрагмента HTML, встроив ${MACRO}
в URL-адрес, используемый для получения объявления, где MACRO
— это один из поддерживаемых макросов, описанных в спецификации OpenRTB .
Макросы Google RTB
Google поддерживает дополнительные макросы, помимо тех, которые указаны в спецификации OpenRTB. Они имеют другой формат и будут выглядеть как %%MACRO%%
если будут встроены в URL-адрес. В следующей таблице описаны эти макросы:
Макрос | Описание |
---|---|
ADVERTISING_IDENTIFIER | Позволяет покупателям получать идентификатор iOS IDFA или рекламный идентификатор Android при показе. Подробности см. в разделе «Расшифровка идентификаторов рекламодателей» . |
CACHEBUSTER | Строковое представление случайного четырехбайтового целого числа без знака. |
CLICK_URL_UNESC | Неэкранированный URL-адрес клика для объявления. Во фрагменте непосредственно за макросом должна следовать экранированная версия стороннего URL-адреса клика. Например, если сторонний URL-адрес клика — <a href="%%CLICK_URL_UNESC%%http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a> Во время показа объявления это расширяется до: <a href="http://google-click-url?...&ad_url=http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a> URL-адрес сначала зарегистрирует клик в Google, а затем перенаправит на сторонний URL-адрес клика. |
CLICK_URL_ESC | Экранированный URL-адрес клика для объявления. Используйте это вместо Например, во фрагменте HTML можно использовать следующий код: <a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%"></a> Во время показа объявления это расширяется до: <a href="http://my.adserver.com/click?google_click_url=http://google-click- url%3F...%26ad_url%3D"></a> При этом клик будет зарегистрирован на сайте Вы можете добавить URL-адрес с двойным экранированием после |
CLICK_URL_ESC_ESC | URL-адрес объявления с двойным экранированием. Используйте это вместо Например, во фрагменте HTML можно использовать следующий код: <a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC_ESC%%"></a> Во время показа объявления это расширяется до: <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 | Расширено до http: если запрос ставки не требует SSL или до https: если запрос ставки требует SSL. |
SITE | Домен URL-адреса контента без экранирования или анонимный идентификатор для анонимного инвентаря. |
SITE_URL | Устарело. Заменен макросом SITE, который обеспечивает идентичную функциональность. |
TZ_OFFSET | Смещение часового пояса. |
VERIFICATION | Различные значения для производства и при сканировании объявления в конвейере проверки. Формат: Например, если объявление должно включать |
WINNING_PRICE | Закодированная стоимость показа (то есть цена за установку, а не цена за тысячу показов) в микро валюте аккаунта. Например, выигрышная цена за тысячу показов в размере 5 долларов США соответствует цене за тысячу показов в 5 000 000 микрон или цене за тысячу показов в 5 000 микрон. Декодированное значение Чтобы проанализировать этот макрос, вам потребуется реализовать приложение, которое расшифровывает подтверждения цен. Дополнительную информацию см. на странице «Расшифровка подтверждений цен» . |
WINNING_PRICE_ESC | WINNING_PRICE с экранированием URL-адреса. |
Google требует, чтобы вы использовали макрос CLICK_URL_UNESC
или CLICK_URL_ESC
в креативе стороннего объявления. Google использует макросы CLICK_URL
для отслеживания кликов.
Экранирование URL-адресов в макросах использует следующую схему:
- Символ пробела заменяется знаком плюс (
+
). - Буквенно-цифровые символы (0–9, az, AZ) и символы из набора !()*,-./:_~ остаются неизменными.
- Все остальные символы заменяются на
%XX
, гдеXX
— шестнадцатеричное число, представляющее символ.
Ограничения и требования издателя
Запрос ставки включает информацию о типах ограничений и требований, которые издатели предъявляют к креативам, участвующим в аукционе.
-
BidRequest.bcat
- Вы можете сравнить заблокированные категории, указанные в этом поле, с категориями, обнаруженными для отправленных вами объявлений, с помощью поля
detectedCategories
API назначения ставок в реальном времени.
- Вы можете сравнить заблокированные категории, указанные в этом поле, с категориями, обнаруженными для отправленных вами объявлений, с помощью поля
-
BidRequest.imp.ext.allowed_vendor_type
-
BidRequest.imp.secure
- На практике это всегда будет
true
поскольку Google требует поддержки SSL для всех объявлений.
- На практике это всегда будет
-
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
Никогда не делайте ставок, используя объявление, содержащее ограниченную функцию. Для разрешенных функций, таких как тип поставщика, возвращайте объявление только в том случае, если его тип поставщика указан в списке allowed_vendor_type
в BidRequest
. В вашу ставку следует включать только форматы объявлений, указанные в запросе ставки посредством заполнения таких полей, как BidRequest.imp.banner
. Дополнительные сведения см. в комментариях к этим полям в определении буфера протокола BidRequest
.
Если объявление возвращается в BidResponse
, вам необходимо точно указать BidResponse.seatbid.bid.attr
, BidResponse.seatbid.bid.cat
и либо BidResponse.seatbid.bid.adomain
, либо BidResponse.seatbid.bid.adm_native.link.url
поля BidResponse.seatbid.bid.adm_native.link.url
в BidResponse
. Если в объявлении указано несколько применимых значений для этих полей, необходимо указать каждое значение. Дополнительную информацию см. в комментариях к этим полям в определении буфера протокола BidResponse
. Ответы, в которых эти поля не установлены, отбрасываются.
Открытое измерение
Open Measurement позволяет указать сторонних поставщиков, которые предоставляют независимые услуги по измерению и проверке рекламы, показываемой в среде мобильных приложений.
Поддерживаемые форматы рекламы включают видео, баннеры и межстраничные объявления. Дополнительную информацию о том, как использовать Open Measurement в ответах на запросы ставок, содержащих эти форматы, можно найти в статье Справочного центра Open Measurement SDK .
Примеры ответов на запросы ставок
В следующих разделах показаны примеры ответов на запросы ставок для разных типов объявлений.