Возможность пропуска

Запрос и отображение объявлений с возможностью пропуска с помощью CAF DAI SDK — довольно сложная задача, поскольку она требует определения того, может ли используемая комбинация отправителей и получателей отображать кнопку пропуска и взаимодействовать с ней.

SDK автоматически приложит все усилия, чтобы определить, может ли текущий получатель отображать и напрямую взаимодействовать с кнопкой пропуска. Однако издателю необходимо определить, может ли какой-либо из подключенных отправителей отображать рекламу с возможностью пропуска, путем переключения атрибута imaRequestData.senderCanSkip .

Во всех примерах для CAF DAI SDK senderCanSkip передается непосредственно от отправителя как часть объекта мультимедиа. Это намеренно упрощенная реализация, которая хорошо работает для одного отправителя, но в реальных приложениях получатель CAF может быть подключен к нескольким приложениям-отправителям, и отправитель, который ставит в очередь медиафайл, может больше не подключаться при загрузке этого медиа-объекта. и выполняется запрос потока.

Более продвинутый получатель мог бы отслеживать, какие аффилированные типы отправителей поддерживают пропуск, а какие нет, и проверял бы во время загрузки, подключены ли какие-либо отправители с возможностью пропуска в настоящее время к получателю.

Пример (один отправитель):

...

    let getStreamRequest = (request) => {
      const imaRequestData = request.media.customData;
      let streamRequest = null;
      if (imaRequestData.assetKey) {
        // Live stream
        streamRequest = new google.ima.cast.dai.api.LiveStreamRequest();
        streamRequest.assetKey = imaRequestData.assetKey;
      } else if (imaRequestData.contentSourceId) {
        // VOD stream
        streamRequest = new google.ima.cast.dai.api.VODStreamRequest();
        streamRequest.contentSourceId = imaRequestData.contentSourceId;
        streamRequest.videoId = imaRequestData.videoId;
      }
      if (streamRequest && imarequestdata.ApiKey) {
        streamRequest.ApiKey = imarequestdata.ApiKey;
      }
      if (streamRequest && imarequestdata.senderCanSkip) {
        streamRequest.senderCanSkip = imaRequestData.senderCanSkip;
      }
      return streamRequest;
    };
...

Пример (поддержка нескольких отправителей):

...

    let getStreamRequest = (request) => {
      const imaRequestData = request.media.customData;
      let streamRequest = null;
      if (imaRequestData.assetKey) {
        // Live stream
        streamRequest = new google.ima.cast.dai.api.LiveStreamRequest();
        streamRequest.assetKey = imaRequestData.assetKey;
      } else if (imaRequestData.contentSourceId) {
        // VOD stream
        streamRequest = new google.ima.cast.dai.api.VODStreamRequest();
        streamRequest.contentSourceId = imaRequestData.contentSourceId;
        streamRequest.videoId = imaRequestData.videoId;
      }
      if (streamRequest && imarequestdata.ApiKey) {
        streamRequest.ApiKey = imarequestdata.ApiKey;
      }

      let senders = castContext.getSenders();
      let senderCanSkip = (sender) => {
        const skippableUserAgents = [
          "iOS CastSDK",
          "Android CastSDK"
        ];
        // trim user agent to just include device
        let userAgent = sender.userAgent.explode(',')[0];
        return skippableUserAgents.includes(userAgent);
      };
      if (streamRequest && senders.some(senderCanSkip)) {
        streamRequest.senderCanSkip = imarequestdata.senderCanSkip;
      }
      return streamRequest;
    };

...

В конечном счете, издатели несут ответственность за работу своих пользователей, и, поскольку все отправители с возможностью пропуска могут отключиться между моментом выполнения запроса на трансляцию и воспроизведением рекламы, вы можете захотеть прикрепить к событию STARTED обработчик, который будет проверять если объявление можно пропустить, а отправитель и получатель не могут поддерживать возможность пропуска. Этот обработчик может автоматически пропускать такие объявления, если они появляются. Однако такая расширенная реализация выходит за рамки поддержки CAF DAI.

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