tgoop.com/dsinsights/302
Last Update:
Bid Adapter Prebid.js
Продолжаем развивать тему Header Bidding'а, сегодня у нас разбор структуры бид адаптеров на Prebid.js
Для чего нужен?
Бид адаптер представляет собой открытый код на JS, который запускается непосредственно в браузере пользователя. Как понятно из названия адаптер парсит запрос на ставку от паблишера, кастует его в формат совместимый с конкретной SSP (как правило в json), отправляет на нее HTTP запрос, принимает ответ с ценой ставки и передает ее в core Prebid.js для разрешения аукциона. Каждая SSP, интегрированная с пребидом имеет свою open-source реализацию адаптера.
Какие этапы работы адаптера?
▶️ isBidRequestValid
Проверяем корректность запроса паблишера: наличие placementId, и флаг над параметрами запроса != undefined.
isBidRequestValid: function (bid) {
if (typeof bid.params !== 'undefined' && parseInt(getValue(bid.params, 'placementId')) > 0) {
logInfo('Bidder adapter valid bid request');
return true;
} else {
logError('Bidder adapter requires placementId to be defined and a positive number');
return false;
}
}
▶️ buildRequests
Если запрос валиден, то обогащаем его. На странице может быть несколько слотов с разными placementId, поэтому через адаптер за раз проходит не один, а несколько validBidRequests.
Под каждый запрос мы извлекаем данные слота:
- Айдишники placementId, bidId, transactionId = ortb2imp.ext.td (если SSP поддерживает его), adUnitCode, gpid. К слову gpid - это глобальный id слота, появился из-за того, что некоторые паблишеры не особо запариваются над уникальностью названий слотов и могут обозвать все слоты на странице, к примеру homepage. Как их различать SSP? Для этого есть gpid. gpid - это склейка из adUnitCode, размера слота и рандомного токена, что помогает SSP различать слоты и избегать коллизий (пример:
homepage#300x250#wje9w
)- Контекстные фичи: referrer, он же URL страницы, pageTitle, pageDescription, которые можно потом закодировать в эмбеддинги
- Фичи пользователя: ширина, высота экрана устройства, networkBandwidth пропускная способность интернета пользователя, ориентация экрана, user agent и все доступные first-party данные (browser, os etc.). Также опционально можно извлечь историю браузера win.top.history.length
buildRequests: function (validBidRequests, bidderRequest) {
const bids = validBidRequests.map(bids => {
const reqObj = {};
let placementId = getValue(bids.params, 'placementId');
const gpid = deepAccess(bids, 'ortb2Imp.ext.gpid');
reqObj.sizes = getSizes(bids);
reqObj.bidId = getBidIdParameter('bidId', bids);
reqObj.bidderRequestId = getBidIdParameter('bidderRequestId', bids);
reqObj.placementId = parseInt(placementId, 10);
reqObj.adUnitCode = getBidIdParameter('adUnitCode', bids);
reqObj.transactionId = bids.ortb2Imp?.ext?.tid || '';
if (gpid) { reqObj.gpid = gpid; }
});
const topWindow = window.top;
const payload = {
referrer: getReferrerInfo(bidderRequest),
pageTitle: getPageTitle().slice(0, 300),
pageDescription: getPageDescription().slice(0, 300),
networkBandwidth: getConnectionDownLink(window.navigator),
data: bids,
device: bidderRequest?.ortb2?.device || {},
deviceWidth: screen.width,
deviceHeight: screen.height,
screenOrientation: screen.orientation?.type,
historyLength: getHLen(),
prebid_version: '$prebid.version$',
};
}
BY ML Advertising
Share with your friend now:
tgoop.com/dsinsights/302