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

Запрос и отображение объявлений с возможностью пропуска с помощью 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.

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