Создание интерактивных объявлений

Интерактивное объявление — это HTML5-креатив (папка с index.html в корне), который плеер отображает в web-view. Интерактив общается с плеером через JavaScript-мост: получает метаданные экрана и кампании, управляет собственной длительностью и возвращает платформе результаты показа.

Объект моста называется csBackend и предоставляет:

  • csBackend.playerData — JSON-объект с данными, которые сервер присылает объявлению (список полей — на странице объекта csPlayerData);

  • csBackend.completeData — объект, который заполняет объявление; отправляется платформе после показа (например, данные programmatic-бида);

  • csBackend.setDuration(миллисекунды) — установка длительности текущего объявления;

  • csBackend.sendResponse(data) — немедленная отправка данных плееру;

  • события:

    • csBackend.afterPlayerInit — вызывается после подгрузки страницы в фоне; все запросы за данными делайте здесь;

    • csBackend.beforePlayerShow — вызывается перед началом показа на экране; здесь запускайте видео и анимации;

    • csBackend.afterPlayerShow — вызывается по окончании показа; здесь финализируйте completeData.

Способ получения csBackend различается между платформами.

Windows / Linux (Qt-плеер)

На PC мост предоставляется через Qt WebChannel. Подключите qwebchannel.js и установите соединение:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Интерактив</title>
    <script type="text/javascript" src="qrc:///qtwebchannel/qwebchannel.js"></script>
</head>
<body>
    <div style="position: absolute; top: 0px; left: 0px">
        <video muted id="v2"></video>
    </div>
    <script>
        var csBackend;
        var video;
        var metaData;

        new QWebChannel(qt.webChannelTransport, function(channel) {
            // объект с данными плеера
            csBackend = channel.objects.csBackend;

            // функция срабатывает, как только страница загрузилась в фоне;
            // все запросы за данными — тут
            csBackend.afterPlayerInit.connect(function() {

                // подставляем контент
                video = document.getElementById("v2");
                video.setAttribute("src", "video.mp4");

                metaData = JSON.parse(csBackend.playerData);

                // GID экрана используется во всех системах — опирайтесь на него
                console.log(metaData.gid);

                // размеры фрейма — контент воспроизводится именно по ним
                console.log("ширина " + metaData.frameResolution.width);
                console.log("высота " + metaData.frameResolution.height);

                // длительность слота в миллисекундах; ролики длиннее можно
                // игнорировать или менять длительность объявления через setDuration
                console.log(metaData.duration);

                // когда объявление выйдет на экран
                var now = Date.now();
                console.log("выйдем на экране через мс: " +
                    (metaData.showingAdvertisementEndTime - now));
            });

            // функция вызывается непосредственно перед показом на экране
            csBackend.beforePlayerShow.connect(function() {
                video.play();
                csBackend.completeData = {
                    htmlProgrammaticAd: "тут можно сохранять бид и прочие данные того, что показали"
                };
            });

            // функция дёргается перед окончанием показа
            csBackend.afterPlayerShow.connect(function() {
                console.log("показ на экране закончился");
            });
        });
    </script>
</body>
</html>

Чтобы протестировать креатив локально без аккаунта CS Play, запустите плеер в режиме отладки.

Android

На Android мост инициализируется через инжектируемый объект Android:

<script>
    // инициализация CS-канала
    var csBackend;
    eval(Android.initCsBackend());

    csBackend.afterPlayerInit.connect(function() {
        var metaData = JSON.parse(csBackend.playerData);
        csBackend.setDuration(10000);
        csBackend.completeData = { "complete": "data" };
    });

    csBackend.beforePlayerShow.connect(function() {
        // старт воспроизведения
    });

    csBackend.afterPlayerShow.connect(function() {
        var completeData = JSON.stringify(csBackend.completeData);
        Android.afterPlayerShow(completeData);
    });
</script>

API csBackend (поля, методы и события) совпадает с PC. Обратите внимание на дополнительный вызов Android.afterPlayerShow(completeData), который возвращает результаты плееру.

Smart TV (Tizen / webOS)

На Smart TV плеер является веб-приложением. Интерактивный контент получает события жизненного цикла через postMessage — пример подписки на события и правила для HTML-контента на странице CS Player на Smart TV.

Доставка файлов на плеер

Интерактивное объявление загружается в медиатеку архивом. Если креативу нужны обновляемые данные (цены, расписания, медиафайлы), настройте для него FTP-синхронизацию.