รองรับโฆษณาแบบข้ามได้

(CAF) โดยใช้ SDK การแทรกโฆษณาแบบไดนามิก (DAI) ของ Google สำหรับ Chromecast

การขอและแสดงโฆษณาที่ข้ามได้ด้วย 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 ซึ่งจะตรวจสอบว่าโฆษณาสามารถข้ามได้หรือไม่ และทั้งผู้ส่งและผู้รับไม่รองรับการข้าม ซึ่งตัวแฮนเดิลดังกล่าวจะข้ามโฆษณาดังกล่าวโดยอัตโนมัติหากปรากฏขึ้น อย่างไรก็ตาม การติดตั้งใช้งานขั้นสูงดังกล่าวอยู่นอกเหนือขอบเขตของการสนับสนุน DAI ของ CAF

โดยค่าเริ่มต้น หากเกิดกรณีที่ซับซ้อนดังกล่าว ผู้ใช้จะยังคงเริ่มข้ามได้ในทางเทคนิค โดยเชื่อมต่ออุปกรณ์ที่ส่งซึ่งรองรับการข้ามก่อน แล้วคลิกปุ่มข้ามที่ปรากฏขึ้น