可略過性設定

使用 CAF DAI SDK 請求及顯示可略過的廣告有點複雜,因為需要確認使用中的傳送者和接收者是否能夠顯示略過按鈕並進行互動。

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

在所有 CAF DAI SDK 的範例中,寄件者 CanSkip 會直接從傳送來源,做為媒體物件的一部分傳送。這是一種簡化的單個實作方式,適用於單一傳送端,但在實際應用程式中,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 的支援範圍。

根據預設,即使發生這類極端情況,使用者仍可先啟動略過程序,方法是先支援支援可略過功能的使用者,然後點選出現的 [略過] 按鈕。