Możliwość pominięcia

Wysyłanie żądań i wyświetlanie reklam możliwych do pominięcia za pomocą pakietu SDK CAF DAI jest dość skomplikowane, ponieważ wymaga określenia, czy używana kombinacja nadawców i odbiorców ma możliwość wyświetlenia przycisku pominięcia i wchodzenia z nim w interakcję.

Pakiet SDK będzie automatycznie starał się wykryć, czy bieżący odbiornik może bezpośrednio renderować przycisk pominięcia i wchodzić z nim w interakcję. Aby jednak określić, czy którykolwiek z dołączonych nadawców może wyświetlać reklamy możliwe do pominięcia, przełącz się w atrybucie imaRequestData.senderCanSkip.

We wszystkich przykładach z pakietem SDK CAF DAI nadawcaCanSkip jest przekazywany bezpośrednio od nadawcy jako część obiektu multimedialnego. Jest to celowo uproszczona implementacja, która sprawdza się w przypadku pojedynczego nadawcy, ale w rzeczywistych aplikacjach odbiornik CAF może być podłączony do wielu aplikacji nadawcy. Nadawca, który umieszcza plik multimedialny w kolejce, może nie być już połączony, gdy obiekt multimedialny zostanie załadowany i zostanie wysłane żądanie strumienia.

Bardziej zaawansowany odbiorca może sprawdzić, które typy stowarzyszonych nadawców obsługują pomijanie, a które nie. Następnie sprawdzi podczas wczytywania, czy jacyś nadawcy z możliwością pominięcia są obecnie powiązani z odbiorcą.

Przykład (pojedynczy nadawca):

...

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

Przykład (obsługa wielu nadawców):

...

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

...

W końcu to wydawcy są odpowiedzialni za a ponieważ wszyscy nadawcy z możliwością pominięcia mogą odłączyć się między momentem przesłania żądania strumienia a odtworzeniem reklamy, warto dołączyć do zdarzenia STARTED moduł obsługi, który będzie sprawdzać, czy reklamę można pominąć i czy nadawcy i odbiorca nie obsługują tej funkcji. Moduł obsługi może automatycznie pominąć takie reklamy, jeśli się pojawią. Tak zaawansowana implementacja wykracza jednak poza zakres obsługi dynamicznego wstawiania reklam (CAF DAI).

Domyślnie w takim przypadku użytkownik może zainicjować pominięcie, najpierw łącząc się z nadawcą, który obsługuje tę funkcję, a następnie klikając wyświetlony przycisk pominięcia.