可略過性設定

使用 CAF DAI SDK 要求及顯示可略過廣告是一項複雜的工作,因為必須確認使用中的寄件者和接收器的組合是否能夠顯示略過按鈕並與之互動。

SDK 會自動盡力偵測目前的接收器是否能夠直接顯示略過按鈕並與之互動。不過,發布商必須切換 imaRequestData.senderCanSkip 屬性,藉此判斷任何附加的寄件者能否顯示可略過的廣告。

在所有 CAF DAI SDK 的範例中,傳送者可以略過,這是做為媒體物件的一部分,直接從傳送者傳遞。這是個故意簡化的實作方式,適用於單一傳送者,但在實際應用程式中, 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 支援範圍。

根據預設,如果發生這類極端情況,使用者仍可啟動略過程序,方法是先連接支援可略過性的寄件者,然後點選隨即顯示的略過按鈕。