Интеграция InStream API

Внимание.

Это архивная версия документации. Актуальная документация по всем платформам находится здесь.

  1. Принципы работы
  2. Загрузка рекламных объявлений
  3. Показ рекламных объявлений

InStream API — API для настройки, управления загрузкой и воспроизведением InStream рекламы. Позволяет поддержать проигрывание всех типов рекламных вставок: Pre-Roll, Mid-Roll, Post-Roll, In-Roll и Pause-Roll.

Для проигрывания вставок с типом Pre-Roll, Mid-Roll, Post-Roll используется InstreamAdBinder API. Для проигрывания вставок с типом In-Roll и Pause-Roll используются In-Roll API и Pause-Roll API соответственно.

Примечание.
Доступно одновременное использование InstreamAdBinder API, In-Roll API и Pause-Roll API при соблюдении определенных условий:
  1. Используйте разные инстансы рекламного плеера.
  2. Не запускайте Pause-Roll и In-Roll API для воспроизведения, если через InStreamAdBinder API было приостановлено основное видео.

Принципы работы

Загруженный объект InStream рекламы содержит в себе расписание показа рекламных вставок. Каждая рекламная вставка описывается объектом InstreamAdBreak. Рекламная вставка может иметь один из следующих типов: Pre / Mid / Post / In / Pause-Roll. Показать Pre/MidPost-Roll вставки можно через InstreamAdBinder API. Показать In / Pause-Roll вставки можно через In-Roll API и Pause-Roll API соответственно.

Для взаимодействия с основным видеоконтентом используется протокол VideoPlayer, а для воспроизведения рекламного видео внутри рекламной вставки — протокол InstreamAdPlayer.

InstreamAdBinder отслеживает ход воспроизведения основного видео и автоматически показывает рекламные вставки на основе расписания рекламных вставок из видеоресурса в Партнерском Интерфейсе.

InstreamAdBinder не управляет непосредственно отрисовкой рекламного видео в PlayerView. Воспроизводить рекламное видео необходимо со стороны приложения основываясь на сигналах от интерфейсов плееров, переданных в InstreamAdBinder. InstreamAdBinder сообщает о начале проигрывания рекламной вставки через вызов VideoPlayer.pauseVideo() и об окончании проигрывания рекламной вставки через вызов VideoPlayer.resumeVideo().

В момент вызова VideoPlayer.pauseVideo() со стороны приложения необходимо скрыть контролы управления основным видео, приостановить основное видео и начать воспроизведение рекламного видео. Со стороны рекламного SDK после вызова метода будут показаны рекламные контролы внутри контейнера InstreamAdView и будет вызван метод InstreamAdPlayer.playAd() для старта воспроизведения рекламного видео.

В момент вызова VideoPlayer.resumeVideo() со стороны приложения необходимо вернуть контролы управления основным видео и продолжить воспроизведение основного видео. Со стороны рекламного SDK до вызова метода будут убраны рекламные контролы внутри контейнера InstreamAdView.

Загрузка рекламных объявлений

  1. Создайте экземпляр класса InstreamAdLoader для получения InStream рекламы.

  2. Чтобы получать уведомления (успешная загрузка рекламы или ошибка при загрузке рекламы) подпишитесь на события загрузки рекламы. Для этого установите делегат, который удовлетворяет протоколу InstreamAdLoaderDelegate.

  3. Создайте конфигурацию запроса instreamAdRequestConfiguration с помощью класса InstreamAdRequestConfiguration. В качестве параметров запроса передайте идентификатор страницы (Page ID) из Партнерского интерфейса.

  4. Загрузите рекламу с помощью метода InstreamAdLoader.loadInstreamAd, передайте в него instreamAdRequestConfiguration.

Для тестирования корректности интеграции используйте демонстрационный Page ID: demo-instream-vmap-yandex.

adLoader = InstreamAdLoader()
adLoader.delegate = self
let configuration = InstreamAdRequestConfiguration(pageID: PAGE_ID)
adloader.loadInstreamAd(configuration: configuration)

Показ рекламных объявлений

  1. Реализуйте интерфейсы InstreamAdPlayer и VideoPlayer.

    В справочнике приведена подробная информация по работе методов и их реализации. Дополнительно рекомендуется ориентироваться на тестовый пример реализации.

    Внимание.

    Для упрощения реализации, рекомендуется использовать разные инстансы плееров для воспроизведения рекламы и контентного видео.

  2. Добавьте в иерархию View приложения InstreamAdView. InstreamAdView должна содержать в себе PlayerView, в которой будут проигрываться рекламные ролики.

    Ограничение.

    Размер контейнера должен быть не меньше 300dp x 160dp.

  3. Создайте объект InstreamAdBinder: передайте в конструктор объект загруженной рекламы InstreamAd и реализации плееров InstreamAdPlayer, VideoPlayer.

    Настройте получение уведомлений о ходе воспроизведения рекламы (готовность к проигрыванию видеорекламы, завершение воспроизведения или ошибка в процессе воспроизведения): установите делегат, который удовлетворяет протоколу InstreamAdBinderDelegate.

    adBinder = InstreamAdBinder(ad: ad, adPlayer: adPlayer, videoPlayer:
    contentPlayer)
    adBinder.delegate = self
  4. Для ускорения старта рекламной вставки с типом Pre-Roll, заранее предзагрузите ее через вызов метода InstreamAdBinder.prepareAd().

    func preparePrerollAd(adBinder: InstreamAdBinder) {
        adBinder.delegate = self
        adBinder.prepareAd()
    }
    
    extension InstreamViewController: InstreamAdBinderDelegate {
        func instreamAdBinder(_ binder: InstreamAdBinder, didPrepare instreamAd: InstreamAd) {
            addInstreamAdBinderToPreloadedAdQueue(binder)
        }
        …
    }
  5. Вызовите метод InstreamAdBinder.bind(with adView: InstreamAdView) у созданного объекта InstreamAdBinder. В качестве параметра передайте InstreamAdView, ранее добавленную в иерархию. После этого InStream SDK начнет автоматически отслеживать прогресс воспроизведения основного видео и возьмет на себя управление проигрыванием рекламных роликов.

    adBinder.bind(with: instreamAdView)
  6. При реализации проигрывания InStream рекламы в списке, необходимо использовать метод InStreamBinder.unbind() при инвалидации ячейки с рекламой в списке. При реализации переиспользуемого пула плееров для скролла, необходимо вызывать InstreamAdbinder.invalidateAdPlayer() при переиспользовании плеера рекламы привязанного к InstreamAdBinder, а при переиспользовании плеера основного контента InstreamAdBinder.invalidateVideoPlayer().

  7. При остановке использования InStreamAdBinder необходимо очищать состояние.

    deinit {
        adBinder.unbind()
        adBinder.invalidateVideoPlayer()
        adBinder.invalidateAdPlayer()
    }