В настоящее время биддинг в мобильном приложении доступен не всем издателям.

Биддинг "сервер-сервер"

Собственная агрегация не является общедоступной

Собственный биддинг в Audience Network сейчас проходит закрытое бета-тестирование и не является общедоступным. Мы будем держать вас в курсе всех изменений.

В качестве альтернативы вы можете получить доступ к биддингу в Audience Network через одну из платформ агрегации, с которыми мы сотрудничаем.

На этой странице:

Facebook Audience Network поддерживает биддинг в мобильных приложениях и на мобильных сайтах. Биддинг в мобильном приложении может интегрироваться с нашим сервером из мобильного клиента или с вашего сервера. В этом обзоре рассматриваются общие принципы биддинга в приложениях.

Введение

Что такое биддинг в приложении?

Биддинг в приложении позволяет издателям организовать объективные и открытые торги за свои рекламные ресурсы, в рамках которых каждая возможность показа рекламы предлагается нескольким источникам спроса в режиме реального времени. Каждый источник спроса может торговаться за показы и выигрывать их при условии максимальной ставки.

Преимущества биддинга в приложении

  • Аукцион в режиме реального времени дает возможность оптимизировать каждый запрос рекламы.
  • Биддинг позволяет узнать реальную ценность ваших рекламных ресурсов.
  • Биддинг легко проводить, и он позволяет сократить расход ресурсов на организацию показа рекламы.

Архитектуры интеграции

Биддинг в приложении проводится через конечную точку, в которой реализован протокол ORTB для подачи и приема ставок на отдельные показы. Для биддинга в приложении необходим SDK Audience Network, позволяющий выполнять следующие действия:

  • получать buyeruid (в Audience Network SDK называется bidderToken ) — это обязательное поле в запросе ставки, уникальное для пользователя и приложения (для других пользователей и приложений этот маркер недействителен);
  • загрузка ответа со ставкой и показ объявления в случае победы этого участника в аукционе;
  • регистрация показов и кликов.

Основные этапы проведения биддинга

  1. Получите маркер участника аукциона. Эта строка с непрозрачным содержимым необходима платформе Audience Network для ответа на запрос ставки.
  2. Отправьте запрос ставки и получите ответ. Это основной этап взаимодействия с конечной точкой биддинга. На нем вы отправляете запрос ставки ORTB и получаете действительный ответ со ставкой или ошибку.
  3. Проведите аукцион и выберите победителя из числа ответов со ставками. Как правило, при проведении аукционов ставки в режиме реального времени сравниваются с ориентировочными ставками CPM от других источников спроса (например, с историческими средними ставками CPM). Причина в том, что не все источники спроса поддерживают ставки в режиме реального времени. Аукцион может проводиться:
    • на внутреннем сервере с применением пользовательской логики;
    • на стороннем сервере аукционов;
    • в клиенте на устройстве пользователя.
  4. Получите объявление, соответствующее ответу со ставкой. Если Audience Network выиграет аукцион, загрузите объявление, передав поле adm из ответа со ставкой в SDK Audience Network на устройстве пользователя. Обратите внимание: поле adm не содержит само объявление. В нем содержится информация, которая позволяет SDK получить объявление с сервера Audience Network.

Типы интеграции

Аукцион (третий этап в описанном выше процессе биддинга) может проводиться на стороне клиента или сервера. Ниже описаны три разных типа интеграции.

Архитектура интеграции "сервер-сервер"

В режиме межсерверной интеграции сервер аукционов вызывает эндпойнт аукциона Audience Network Facebook и все прочие источники спроса для получения откликов на ставки. После этого сервер проводит аукцион и выбирает ставку-победителя. Сервер аукционов может быть внутренним, с вашей собственной логикой проведения аукциона, или сторонним, интегрированным с аукционами для приложений Audience Network. Благодаря этому вы можете использовать ресурсы сервера и доступную сеть для вызова эндпойнтов аукциона для источников спроса. Вы также можете вносить изменения в интеграцию этих эндпойнтов без обновления клиента.


Интеграция внешнего сервера рекламы

Интеграция внешнего сервера рекламы позволяет объединить агрегацию водопадов с аукционами в приложениях. Для этого выполняется интеграция в режиме "сервер-сервер" с источниками спроса, поддерживающими аукционы в приложениях, а затем данные о победителе аукциона передаются платформе агрегации водопадов, которая запускает водопад и выбирает победивший источник спроса. Такая интеграция служит промежуточным звеном между агрегацией водопадов и аукционами в приложениях. Такой тип интеграции избавляет от необходимости писать собственную логику аукционов.

Запросы и ответы ORTB и поддерживаемые форматы рекламы

Запрос ORTB

Наша конечная точка биддинга поддерживает подмножество протокола OpenRTB версии 2.5.

Примечание. Пример полного запроса см. в руководстве по настройке сервера аукционов

'id' => string, // platform's auction identifier,
'imp' => vec< // slots to bid on
shape(
'id' => string, // platform's identifier for this slot auction
// only for banner impression opportunities
'banner' => shape(
'w' => int, // width
'h' => int, // height
),
// only for native impression opportunities
'native' => shape(
'w' => int, // width 
'h' => int, // height 
),
// only for video impression opportunities
'video' => shape(
'w' => int, // width
'h' => int, // height
'linearity' => int, // 1 = instream, optional
'ext' => shape(
'videotype' => string, // 'rewarded' for Rewarded Video impression opportunities, optional
),
),
'tagid' => string, // Placement ID
'instl' => int, // interstitial flag, 1 = On, 0 = Off, optional
)
>,
// app details (in-app bidding only)
'app' => shape( 
'publisher' => shape(
'id' => string, // publisher app ID
),
),
'device' => shape(
'ua' => string, // device user-agent
'ifa' => string, // ID sanctioned for advertiser use
// Do not send ip or ipv6 if you are requesting bids from the client device.
// For server-side bid requests set ip or ipv6.
'ip' => string, // device IPv4
'ipv6' => string, // device IPv6
'dnt' => int, // "do not track", 1 = On, 0 = Off, optional
'lmt' => int, // "limit ad tracking", 1 = On, 0 = Off
),
'regs' => shape( // regulations object
'coppa' => int, // US FTC regulations for Children's Online Privacy Protection Act, 1 = On, 0 = Off, optional
),
'user' => shape(
'buyeruid' => string, // Audience Network Identity Token, mandatory
),
'ext' => shape(
'platformid' => string, // Mediation partner Platform ID or publisher FB app ID, mandatory
'authentication_id' => string // Authentication token to validate the originator of the request                     
),
'at' => int, // auction type: 1 = First Price, 2 = Second Price
'tmax' => int, // auction timeout in milliseconds
'test' => int, // 0 = normal, 1 = test-mode (we bid $99.99, but don't pay out), optional

Поддерживаемые форматы рекламы

В настоящее время мы поддерживаем четыре типа рекламы, которые можно запросить через OpenRTB: баннеры, нативную (или нативную баннерную) рекламу, видео (с вознаграждением или In-Stream) и межстраничную рекламу. Примечание. Объекты баннеров, нативной рекламы и видео являются взаимоисключающими, однако один из этих объектов обязателен.

Список поддерживаемых в запросе на рекламу форматов рекламы:

Формат рекламы Параметры в запросе на рекламу

Нативная

{'id': ${AUCTION_ID}, 'native': { 'h': -1, 'w': -1 }, 'tagid': ${PLACEMENT_ID}}

Нативная баннерная

{'id': ${AUCTION_ID}, 'native': { 'h': -1, 'w': -1 }, 'tagid': ${PLACEMENT_ID}}

Межстраничная

{'id': ${AUCTION_ID}, 'banner': { 'h': 0, 'w': 0 }, 'tagid': ${PLACEMENT_ID}, 'instl': 1}

Видео с вознаграждением

{'id': ${AUCTION_ID}, 'video': { 'h': 0, 'w': 0, 'ext': { 'videotype': 'rewarded' } }, 'tagid': ${PLACEMENT_ID}}

Межстраничная с вознаграждением

{'id': ${AUCTION_ID}, 'video': { 'h': 0, 'w': 0, 'ext': { 'videotype': 'rewarded_interstitial' } }, 'tagid': ${PLACEMENT_ID}}

Баннер, высота 50

{'id': ${AUCTION_ID}, 'banner': { 'h': 50, 'w': -1 }, 'tagid': ${PLACEMENT_ID}}

Баннер, высота 250 *

{'id': ${AUCTION_ID}, 'banner': { 'h': 250, 'w': -1 }, 'tagid': ${PLACEMENT_ID}}

* Баннер или место размещения "Средний прямоугольник" для рекламы этого формата можно создать в Monetization Manager.

Ответ ORTB

Ответ со ставкой действителен в течение 30 минут. Запросить объявление можно в любой момент в течение 30 минут после получения ответа со ставкой. По истечении этого времени показы на основе ставок не оплачиваются.

Примечание. После запроса объявления, соответствующего ответу со ставкой, оно может кэшироваться в клиенте, но должно быть показано в течение 60 минут с момента загрузки. По истечении этого времени показы кэшированных объявлений не оплачиваются.

1  
'id' => string // platform's request identifier
'seatbid' => vec<
    shape(
        'bid' => vec<
            shape(
                'id' => string, // Our identifier for this bid
                'impid' => string, // platform's identifier for this slot auction
                'price' => float, // Our bid price on CPM basis, in USD
                'adm' => string, // Our creative - see Rendering The Ad
                'nurl' => string, // URL to get if we win the impression
                'lurl' => string, // URL to get if we lose the impression
            )
        >,
    ),
>,
'bidid' => string, // Our identifier for this response
'cur' => string, // bid currency: USD

Уведомления о выигрыше, проигрыше, счетах и тайм-аутах

Необходимо отправлять уведомления о выигрыше, проигрыше, счетах и тайм-аутах с соответствующими кодами проигрыша, определенными в ORTB. В отклике на ставку передаются параметры ORTB nurl, lurl и burl. Пример отклика на ставку см. в предыдущем разделе. На случай тайм-аута ставки мы предлагаем альтернативный маршрут уведомления.

Уведомление о выигрыше

Отклик на ставку содержит параметр nurl выигрыша. В nurl необходимо подставить цену окончательного расчета:

"https://www.facebook.com/audiencenetwork/nurl/?partner=${PARTNER_FBID}&app=${APP_FBID}&placement=${PLACEMENT_FBID}&auction=${AUCTION_ID}&impression=${IMPRESSION_ID}&request=${BID_REQUEST_ID}&bid=${BID_ID}&ortb_loss_code=0&clearing_price=${AUCTION_PRICE}"
  • ${AUCTION_PRICE}: это значение заменяется ценой окончательного расчета для аукциона в тех же единицах измерения, что и ставка (т. е. доллары США для CPM).

Уведомление о проигрыше

Наш параметр lurl для проигрыша имеет два флага, значения которых необходимо подставить:

"https://www.facebook.com/audiencenetwork/nurl/?partner=${PARTNER_FBID}&app=${APP_FBID}&placement=${PLACEMENT_FBID}&auction=${AUCTION_ID}&impression=${IMPRESSION_ID}&request=${BID_REQUEST_ID}&bid=${BID_ID}&ortb_loss_code=${AUCTION_LOSS}&clearing_price=${AUCTION_PRICE}"
  • ${AUCTION_LOSS}: это значение заменяется кодом проигрыша ORTB.
  • ${AUCTION_PRICE}: это значение заменяется ценой окончательного расчета для аукциона в тех же единицах измерения, что и ставка (т. е. доллары США для CPM).

Ниже приведен список различных кодов проигрыша и соответствующих причин проигрыша.

Причина проигрышаОписаниеКод проигрыша ORTB 2.5

Недействительный отклик на ставку

Ставка недействительна (однако подана вовремя, не является "не ставкой" и позволяет извлечь из нее параметр nurl).

3

Тайм-аут ставки *

Отклик на ставку получен, но слишком поздно (после завершения аукциона).

2

Не ставка

Объекты, не являющиеся ставками, обозначаются кодом HTTP 204 (т. е. не содержат параметра nurl, по которому можно было бы выполнить вызов), однако наш отклик может интерпретироваться как отклик на объект, не являющийся ставкой (как правило, это проблема интеграции). Вы также можете запросить ставки для нескольких показов, а мы предложим ставку для некоторых (но не всех) из них.

9

Не самая высокая ставка RTB

Наша ставка проиграла другой ставке (возможно, синтетической, то есть не относящейся к бирже RTB) в том же аукционе.

102

Элемент не был показан

Наша ставка выиграла аукцион, но показ не был реализован (например, страница оказалась недостаточно длинной для того, чтобы включить соответствующий слот, или пользователь вышел из приложения, прежде чем было использовано кэшированное объявление). Такой отклик предоставляют не все партнеры (это не является событием). Если он не указан, мы его подразумеваем.

4902

Отправлено на сервер рекламы

Этот отклик отправляется, если с последнего этапа в процессе принятия решений наша максимальная ставка отправляется на сервер рекламы. При этом показ может быть не реализован из-за отсутствия элементов строки, переопределения результатов аукциона сервером рекламы либо из-за того, что соответствующий элемент не был показан.

4900

Победитель RTB не был выбран сервером рекламы

Мы выиграли аукцион RTB, но сервер рекламы переопределил его результаты (например, напрямую).

4903

Выигрыш

Мы выиграли по результатам полного дерева решений, и на страницу был добавлен тег (для сайта) либо был кэширован объект объявления (для приложения). При этом показ все равно может быть не реализован.

0

Уведомление о счете

В случае обратного вызова показа из SDK Audience Network необходимо отправлять уведомления о счетах. В burl необходимо подставить цену окончательного расчета:

"https://www.facebook.com/audiencenetwork/burl/?partner=${PARTNER_FBID}&app=${APP_FBID}&placement=${PLACEMENT_FBID}&auction=${AUCTION_ID}&impression=${IMPRESSION_ID}&request=${BID_REQUEST_ID}&bid=${BID_ID}&ortb_loss_code=0&clearing_price=${AUCTION_PRICE}"
  • ${AUCTION_PRICE}: это значение заменяется ценой окончательного расчета для аукциона в тех же единицах измерения, что и ставка (т. е. USD для CPM).

Уведомление о тайм-ауте

На случай тайм-аута ставки мы предлагаем вам альтернативный маршрут уведомления. Это стандартный nurl, который можно вызывать, не ожидая поступления ставки. Используется следующий формат:

"https://www.facebook.com/audiencenetwork/nurl/?partner=${PARTNER_FBID}&app=${APP_FBID}&auction=${AUCTION_ID}&ortb_loss_code=2"

Примечание. В параметры ${PARTNER_FBID}, ${APP_FBID} и ${AUCTION_ID} необходимо подставить соответствующие значения. Они описаны в таблице ниже.

ПараметрТипОписание

PARTNER_FBID

Целое число

ID сервера аукциона рекламы, выдаваемый Facebook. Если у вас нет отдельного партнера по аукциону рекламы, вставьте сюда ID своего приложения.

APP_FBID

Целое число

Выдаваемый Facebook ID приложения или компании, запустившей аукцион.

AUCTION_ID

Строка

Созданный клиентом ID аукциона, который вы использовали для отправки запроса ставки.

Выплаты, аукционы, видимость и задержка

Цены и выплаты

Цены указываются в долларах США за CPM (т. е. цена в размере 4,25 означает выплату в размере 4,25 доллара США за 1000 показов в случае выигрыша ставки). Та же единица измерения должна использоваться для цены окончательного расчета в параметрах nurl и lurl. Выплаты осуществляются непосредственно издателю.

Механизм аукциона

Ставки всегда делаются по принципу первой цены, т. е. выплачивается вся сумма ставки, а ставка делается с предположением, что будет выплачена полная сумма. Такая схема приводит к невыгодному положению на аукционе второй цены, где другие участники могут делать ставки исходя из предположения, что они выплатят меньше полной суммы.

Видимость

Для показов в приложении: мы оплачиваем только просмотренные показы независимо от того, была ли наша ставка наивысшей.

Задержка

  • Для обеспечения минимальной задержки запросы ставки следует отправлять по одному в каждом вызове API (например, если на аукцион выставлено пять слотов, необходимо вызвать API пять раз — по одному для каждой ставки).
  • Конечные точки для отдельных регионов не предоставляются. Инфраструктура Facebook перенаправляет запросы ставок в ближайший дата-центр.
  • Используйте постоянные подключения HTTP/2.
  • Подставьте в поле tmax ORTB в запросе ставки значение тайм-аута аукциона, чтобы стратегия биддинга выбиралась исходя из величины задержки и результативности. (Дополнительную информацию о поле tmax см. в примере запроса ставки выше.)
  • Для достижения целевых показателей задержки обработка может быть частично отложена до момента отображения (т. е. более быстрая ставка может означать более медленное отображение рекламы, и наоборот).
  • Мы активно работаем над уменьшением задержки. В настоящее время для биддинга "сервер-сервер" рекомендуется тайм-аут 800 мс.