건너뛰기 가능 여부

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 지원 범위를 벗어납니다.

기본적으로 이러한 예외적인 케이스가 발생하더라도 사용자는 건너뛰기 기능을 지원하는 발신자를 먼저 연결한 다음 표시되는 건너뛰기 버튼을 클릭하여 기술적으로 건너뛰기를 시작할 수 있습니다.