Capacidade de pular

Solicitar e mostrar anúncios puláveis com o SDK da DAI do CAF é uma tarefa complexa, porque exige que a combinação de remetentes e receptores em uso possa ser exibida e interagir com um botão "Pular".

O SDK fará os esforços automáticos para detectar se o receptor atual pode renderizar e interagir diretamente com um 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 da DAI do CAF, o remetenteCanSkip é transmitido diretamente do remetente, como parte do objeto de mídia. Essa é uma implementação simplificada que funciona bem para um único remetente. No entanto, em aplicativos reais, um receptor CAF pode ser anexado a vários apps de remetente, e o remetente que enfileira um arquivo de mídia pode não estar mais conectado quando esse objeto de mídia é carregado e a solicitação de stream é feita.

Um receptor mais avançado pode acompanhar quais tipos de remetentes afiliados oferecem suporte a serem ignorados e quais não são. Além disso, é possível verificar no momento do carregamento se algum remetente com recurso de pular está anexado no momento.

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

...

Por fim, os editores são responsáveis pela experiência dos usuários. Como é possível desconectar todos os remetentes puláveis quando a solicitação de stream é feita e quando o anúncio é exibido, anexe um gerenciador ao evento STARTED para verificar se um anúncio é pulável e os remetentes e os receptores não são compatíveis com a possibilidade de pular. Esse gerenciador pode pular automaticamente esses anúncios, se eles aparecerem. No entanto, essa implementação avançada está além do escopo da compatibilidade com a DAI do CAF.

Por padrão, se ocorrer um caso extremo, o usuário ainda poderá tecnicamente iniciar uma ação de pular, conectando primeiro um remetente com suporte à possibilidade de pular e, em seguida, clicando no botão "Pular".