Web Ads SDK (JS)
Web Ads SDK (далее SDK) предназначено для монетизации рекламного инвентаря в веб-приложениях ( веб-сайтах ). В состав SDK включены:
- Advertising SDK - для запроса и отображения рекламы в приложении
Прежде чем начать
Вам должны быть известны следующие параметры, необходимые для инициализации и использования SDK. Попросите команду SDK выдать их вам.
bannerURL
- URL API рекламной системы. Например:https://test.com/
SDK URL
- URL для загрузки SDK в веб-приложение (веб-сайт). Например:https://test-sdk.com/web-sdk.js
Версия Ads SDK: 0.5.1
Инициализация
Инициализация библиотеки выполняется разработчиком посредством вызова метода webSDK.init()
.
type InitParams = {
baseUrl: string; // DEPRECATED
bannerURL: string;
uid?: string;
sessionId: string;
debug?: 'error' | 'warn' | 'info' | 'debug';
};
type Init = (params: InitParams) => void;
bannerURL
- выданный вам URL API рекламной системы (см. выше). Например:https://test.com/
sessionId
- Уникальный идентификатор сессии, определяющий текущую сессию приложения. For example:bfd0620a5017d1362431aea6c1d6e504
.uid
- (необязательный) уникальный идентификатор пользователя. В качестве идентификатора может служить хэш email-а или номера телефона указанного пользователем при регистрации. Например:bfd0620a5017d1362431aea6c1d6e504
.debug
- (необязательный) флаг определяет уровень логирования дебаг информации в SDK.warn
по умолчанию.
Разместите вызов метода init
как можно раньше при загрузке веб-страницы. Лучше если это сделать внутри тега <head>
. Для этого откройте код своего сайта и найдите в нем код тега <head>
.
<!-- Example -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Web Ads SDK (JS)</title>
<!-- INSERT SDK CODE FOR INITIALISATION HERE -->
</head>
</html>
Поместите код инициализации в нижнюю часть раздела заголовка над закрывающим тегом </head>
:
<script type="module">
import webSDK from 'https://test-sdk.com/web-sdk.js';
webSDK.init({
bannerURL: 'https://test.com/',
uid: 'bfd0620a5017d1362431aea6c1d6e504',
sessionId: 'bfd0620a5017d1362431aea6c1d6e504',
});
</script>
User ID (UID)
Ваше мобильное приложение может быть:
- Anonymous - публичное приложение, которое не требует для доступа к функционалу авторизации пользователя.
- AuthN/AuthZ - пользователь должен иметь аккаунт и пройти авторизацию для доступа к функционалу.
- Комбинированное - часть функционала приложения доступна пользователю без авторизации, когда как другая часть только после прохождения таковой.
SDK предоставляет функцию setUserId
, позволяющую выставлять значение уникального идентификатора пользователя, прошедшего авторизацию. Используйте данную функцию для установки значение uid
при каждой успешной попытке авторизации пользователя в вашем приложении.
INFO
Данный функционал аналогичен выставлению поля uid
в фунции init
. Если приложение еще не обладает информацией о пользователе на этапе вызова функции init
, тогда данную информацию можно передать позже через функцию setUserId
.
<div id="placement_id" class="placement"></div>
<script type="module">
import webSDK from 'https://test-sdk.com/web-sdk.js';
// Вызов без указания uid
webSDK.init({
bannerURL: 'https://test.com/',
sessionId: 'bfd0620a5017d1362431aea6c1d6e504',
});
// Позже во время входа пользователя в систему, необходимо вызвать функцию setUserId
webSDK.setUserId('testUID');
</script>
export type SetUserId = (uid: string) => void;
uid
- (обязательный) уникальный идентификатор пользователя, прошедшего успешную авторизацию внутри хост приложения.
Показ рекламного баннера
Инициализация баннера происходит посредством вызова функции webSDK.loadBanner()
.
type AdSize = {
w: number;
h: number;
};
type BannerPlacement = {
placementId: string;
origin?: string;
sizes: AdSize[];
refresh?: number;
customParams?: Record<string, unknown>;
};
export type BannerLoad = (placements: BannerPlacement[]) => Promise<void>;
placementId
- идентификатор рекламного места. Например:"456"
.origin
- (необязательный) строка определяющая origin (scheme, hostname, and port) с которого будет производиться запрос.sizes
- список допустимых размеров для баннера.refresh
- (необязательный) параметр, описывающий время в секундах, через которое будет выполнен повторный запрос рекламного баннера. Если его не указать, то загрузка рекламного креатива произойдет один раз.customParams
- (необязательный) пользовательские параметры, которые можно по согласованию передать на сервер для дальнейшей их обработки.
Разместите в любом подходящем с точки зрения дизайна месте страницы div
элемент с аттрибутом id
, который будет указывать на идентификатор рекламного места. Сразу за ним разместите тег script
, содержащий вызов метода webSDK.loadBanner()
.
Внимание
внутреннее содержимое div
тэга используется самим SDK для отображения рекламного баннера. Не размещайте ничего в нем самостоятельно, т.к. в противном случае может получиться непредвиденный результат во время работы SDK.
<div id="placement_id" class="placement"></div>
<script type="module">
import webSDK from 'https://test-sdk.com/web-sdk.js';
webSDK.loadBanner([
{
placementId: 'placement_id',
origin: 'https://domain.com',
sizes: [{ w: 240, h: 300 }],
refresh: 30,
customParams: {
gdprConsent: 'CPsmEWIPsmEWIABAMBFRACBsABEAAAAgEIYgACJAAYiAAA.QRXwAgAAgivA',
ccpa: '1YNN',
coppa: 1,
},
},
]);
</script>
NoAd
Если после вызова loadBanner() функции был получен 204 статус, то рекламные места будут обработаны в соотвествии с NoAd логикой.
- NoAdContent событие будет сгенерировано.
- Элемент div, отведенный для рекламного баннера, будет скрыт.
- Если ответ с 204 статусом получен от первого запроса, то по умолчанию через 3 секунды будет произведен повторный запрос рекламного баннера.
- Если ответ с 204 статусом получен после серии запросов, тогда для параметра refresh будет установлено значение из последнего 200 ответа от сервера.
- Запросы будут повторятся с указанными настройками, пока не будет получен ответ со статусом 200. Из данного ответа обновится параметр refresh.
- Если для refresh было установлено значение равно нулю, то повторных запросов рекламного баннера больше производится не будет.
Показ товарного баннера
Товарный баннер - специальный тип рекламного креатива для RetailMedia платформ, использующий в своей основе SKU идентификатор товара в RetailMedia платформе. SDK на своей стороне в данном случае не производит рендеринг рекламного контента и выполнение функционала трекинга и переходов на посадочную страницу. В данном типе креатива это зона отвественности разработчика. Получив ответ от SDK со списком креативов и их SKU, разработчик формирует отображение рекламного контент на основе уже существующих картинок товаров в платформе по этим SKU, в соответствии с внутренними шаблонам и стилями, обеспечивая вызов необходимых трекинг событий.
Инициализация товарного креатива происходит посредством вызова функции webSDK.loadProduct()
.
type ProductPlacement = {
placementId: string;
origin?: string;
refresh?: number;
customParams?: Record<string, unknown>;
};
export type ProductResponse = {
bids: ProductCreative[];
};
export type ProductLoad = (placements: ProductPlacement[]) => Promise<void>;
Параметры
placementId
- идентификатор рекламного места. Например:"456"
.origin
- (необязательный) строка определяющая origin (scheme, hostname, and port) с которого будет производиться запрос.refresh
- (необязательный) параметр, описывающий время в секундах, через которое будет выполнен повторный запрос рекламного баннера. Если его не указать, то загрузка рекламного креатива произойдет один раз.customParams
- (необязательный) пользовательские параметры, которые можно по согласованию передать на сервер для дальнейшей их обработки.
Возвращаемое значение
ProductResponse
объект с полем bids, содержащий массив объектов ProductCreative.
Примеры
<script type="module">
import webSDK from 'https://test-sdk.com/web-sdk.js';
webSDK.loadProduct([
{
placementId: 'placement_id',
origin: 'https://domain.com',
refresh: 30,
customParams: {
gdprConsent: 'CPsmEWIPsmEWIABAMBFRACBsABEAAAAgEIYgACJAAYiAAA.QRXwAgAAgivA',
ccpa: '1YNN',
coppa: 1,
},
},
]);
webSDK.onEvent(webSDK.Events.LoadDataSuccess, 'placement_id', ({ detail }) =>
console.log(`Данные загружены успешно. Товарный креатив: ${JSON.stringify(detail)} `),
);
</script>
NoAd
Если после вызова loadProduct() функции был получен 204 статус, то рекламные места будут обработаны в соотвествии с NoAd логикой.
- Для таких placements будет сгенерировано событие NoAdContent.
Обработка событий
Обработка событий показа рекламного баннера происходит с помощью функций webSDK.onEvent()
и webSDK.onEvent()
. Список самих событий приведен ниже.
Функция webSDK.onEvent()
позволяет добавлять функции-обработчики (callback) на определенное событие показа рекламного баннера. Функция webSDK.offEvent()
удаляет все функции-обработчики с определенного события показа рекламного баннера.
type onEvent = (event: Events, placementId: string, callback: () => void) => void;
type offEvent = (event: Events, placementId: string) => void;
События:
LoadDataSuccess
- запрос к рекламному серверу успешно вернул данные;LoadDataFail
- ошибка при запросе к рекламному серверу;LoadContentSuccess
- креатив успешно отрисован;LoadContentFail
- ошибка при отрисовке креатива, контент креатива содержит недопустимые данные;NoAdContent
- запрос к рекламному серверу успешно завершился, но сервер не нашел рекламного контента под данные параметры запроса;Impression
- рекламный креатив был показан пользователю;Click
- пользователь произвел нажатие на рекламный креатив;Viewable
- рекламный креатив был показан в зоне видимости пользователя.
<div id="placement_id" class="placement">Placeholder for ad placement</div>
<script type="module">
import webSDK from 'https://test-sdk.com/web-sdk.js';
webSDK.onEvent(webSDK.Events.LoadDataSuccess, 'placement_id', () => console.log('Данные загружены успешно.'));
webSDK.onEvent(webSDK.Events.LoadContentSuccess, 'placement_id', () =>
console.log('Контент креатива успешно добавлен на страницу.'),
);
webSDK.onEvent(webSDK.Events.LoadDataFail, 'placement_id', () => console.log('Данные не загружены с сервера.'));
webSDK.onEvent(webSDK.Events.LoadContentFail, 'placement_id', () =>
console.log('Контент креатива не был отрисован на странице.'),
);
webSDK.onEvent(webSDK.Events.Impression, 'placement_id', () => console.log('Контент креатива успешно показан.'));
webSDK.onEvent(webSDK.Events.Click, 'placement_id', () => console.log('Пользователь произвел нажатие на креатива.'));
webSDK.onEvent(webSDK.Events.Viewable, 'placement_id', () =>
console.log('Контент креатива находится в зоне видимости пользователя.'),
);
</script>
Вспомогательные типы
AdSize
Тип объект, описывающий размер места размещения. Содержит поля, соответствующих ширине и высоте места размещения в пикселях.
type AdSize = {
w: number;
h: number;
};
w
- Ширина в пикселях. Например:300
h
- Высота в пикселях. Например:250
ProductCreative
Объект, описывающий товарный креатив.
export type ProductCreative = {
id: string;
placementId: string;
sku: string;
externalId: string;
disclaimer?: string;
tracking?: ProductTracking;
advertiser?: string;
};
requestId
- id запросаplacementId
- идентификатор рекламного места.sku
- уникальный идентификатор товараexternalId
- уникальный внешний идентификатор рекламного объявленияdisclaimer
- (необязательный) письменный отказ от ответственности либо об ограничении ответственности при публикации рекламного контентаtracking
- (необязательный) объект, содержащий URLs для трекинга событий ProductTrackingadvertiser
- (необязательный) имя рекламодателя.
ProductTracking
Object represents tracking urls.
export type ProductTracking = {
view: string[];
click: string[];
impression: string[];
};
click
- список URLs для трекинга событий клика.impression
- список URLs для трекинга событий показа.view
- список URLs для трекинга событий показа в области видимости.