Расширенная интеграция (InStream API)

Внимание.

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

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

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

Для автоматического проигрывания вставок с типом 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. Настройте получение уведомлений (успешная загрузка рекламы или ошибка при загрузке рекламы): создайте экземпляр InstreamAdLoadListener и установите его в качестве слушателя событий загрузчика рекламных объявлений.

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

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

Пример кода:

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

final InstreamAdLoader instreamAdLoader = new InstreamAdLoader(context);
instreamAdLoader.setInstreamAdLoadListener(new InstreamAdLoadListener() {
        @override
        public void onInstreamAdLoaded(@NonNull final InstreamAd instreamAd) {
        ...
        }

        @override
        public void onInstreamAdFailedToLoad(@NonNull final String reason) {
        ...
        }
    });

final InstreamAdRequestConfiguration instreamAdRequestConfiguration = 
    new InstreamAdRequestConfiguration.Builder(PAGE_ID).build();
instreamAdLoader.loadInstreamAd(this, instreamAdRequestConfiguration);

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

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

    В разделах справочника Package com.yandex.mobile.ads.instream.player.ad и Package com.yandex.mobile.ads.instream.player.content приведена подробная информация по работе методов и их реализации. Дополнительно рекомендуется ориентироваться на тестовый пример реализации.

    Внимание.

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

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

    Пример кода:
    Ограничение.

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

    <com.yandex.mobile.ads.instream.player.ad.InstreamAdView
        android:id="@+id/instream_ad_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
            <PlayerView
                android:id="@+id/player_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
            
    </com.yandex.mobile.ads.instream.player.ad.InstreamAdView>
  3. Создайте объект InstreamAdBinder: передайте в конструктор Context, объект загруженной рекламы InstreamAd и реализации плееров InstreamAdPlayer, VideoPlayer.

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

    mInstreamAdBinder = new InstreamAdBinder(context, mInstreamAd, mYandexAdPlayer, mContentVideoPlayer);
    mInstreamAdBinder.setInstreamAdListener(...);
  4. Для ускорения старта рекламной вставки с типом Pre-Roll, заранее предзагрузите ее через вызов метода InstreamAdBinder.prepareAd().

    private void preparePrerollAd(@NonNull final InstreamAdBinder instreamAdBinder) {
        instreamAdBinder.setInstreamAdListener(new InstreamAdListener() {
            ...
            public void onInstreamAdPrepared() {
                addInstreamAdBinderToPreloadedAdQueue(instreamAdBinder);
            }
            ...
        });
        instreamAdBinder.prepareAd();
    }
  5. Вызовите метод InstreamAdBinder.bind(instreamAdView) у созданного объекта InstreamAdBinder. В качестве параметра передайте InstreamAdView. После этого InStream SDK начнет автоматически отслеживать прогресс воспроизведения основного видео и возьмет на себя управление проигрыванием рекламных роликов.

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

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

    public void onDestroy() {
        instreamAdBinder.unbind();
        instreamAdBinder.invalidateVideoPlayer();
        instreamAdBinder.invalidateAdPlayer();
        instreamAdBinder.setInstreamAdListener(null);
        instreamAdBinder.setVideoAdPlaybackListener(null);
     
        super.onDestroy();
    }