Capacidade de pular

Solicitar e exibir anúncios puláveis com o SDK de DAI do CAF é uma tarefa um pouco complexa, porque exige identificar se a combinação de remetentes e destinatários em uso pode exibir e interagir com um botão "Pular".

O SDK fará o possível para detectar automaticamente se o receptor atual pode renderizar e interagir diretamente com o botão "Pular". No entanto, o editor precisa determinar se algum dos remetentes anexados pode exibir anúncios puláveis, alternando o atributo imaRequestData.senderCanSkip.

Em todas as amostras do SDK de DAI do CAF, o resellerCanSkip é transmitido diretamente do remetente como parte do objeto de mídia. Essa é uma implementação propositalmente simplificada que funciona bem para um único remetente. No entanto, em aplicativos reais, um receptor de CAF pode ser anexado a vários aplicativos de remetente e o remetente que enfileira um arquivo de mídia pode não estar mais conectado quando esse objeto de mídia for carregado e a solicitação de stream for feita.

Um receptor mais avançado pode monitorar quais tipos de remetentes afiliados aceitam ou não pular e verifica no tempo de carregamento se algum remetente que permite pular estão atualmente anexados ao destinatário.

Exemplo (remetente único):

...

    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;
    };
...

Exemplo (suporte a vários remetentes):

...

    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;
    };

...

Em última análise, os editores são responsáveis pelos recursos Além disso, como é possível que todos os remetentes puláveis se desvinculem entre o momento em que a solicitação de streaming é feita e o momento em que o anúncio é reproduzido, você pode anexar um gerenciador ao evento STARTED para verificar se um anúncio é pulável e se os remetentes e o destinatário não oferecem suporte ao recurso pulável. Esse gerenciador poderá ignorar automaticamente esses anúncios, se eles aparecerem. No entanto, essa implementação avançada está além do escopo do suporte à DAI do CAF.

Por padrão, se esse caso extremo ocorrer, o usuário ainda poderá tecnicamente iniciar uma ação de pular. Para isso, primeiro conecte um remetente compatível com o recurso pulável e, em seguida, clique no botão "Pular" exibido.