スキップ設定

CAF DAI SDK を使ったスキップ可能な広告のリクエストと表示は、少し複雑なタスクです。使用する送信者と受信者の組み合わせでスキップボタンを表示、操作できるかどうかを特定する必要があるためです。

SDK は、現在のレシーバにスキップボタンのレンダリングや直接操作できるかどうかを自動的に検出します。ただし、パブリッシャーは、imaRequestData.senderCanSkip 属性を切り替えて、関連付けられた送信者のいずれかがスキップ可能な広告を表示できるかどうかを判断する必要があります。

CAF DAI SDK のすべてのサンプルで、 senderCanSkip はメディア オブジェクトの一部として送信者から直接渡されます。これは意図的に簡素化された実装であり、単一の送信者に対して適切に機能しますが、実際のアプリでは 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 のサポート範囲外です。

デフォルトでは、このようなエッジケースが発生した場合でも、技術的にはユーザーがスキップを開始できます。まず、スキップ機能に対応している送信者を接続し、表示されるスキップボタンをクリックします。