กระดุมแป๊ก

ในฐานะผู้เผยแพร่โฆษณาวิดีโอ คุณอาจต้องการป้องกันไม่ให้ผู้ชมดูผ่านโฆษณาตอนกลางของคุณ เมื่อผู้ใช้เลื่อนผ่านช่วงพักโฆษณาไปแล้ว คุณสามารถนำผู้ใช้กลับไปยังจุดเริ่มต้นของช่วงพักโฆษณาได้ จากนั้นจึงนำผู้ใช้กลับไปยังตำแหน่งเดิมหลังจากช่วงพักโฆษณาสิ้นสุดลง คุณลักษณะนี้เรียกว่า "snapback"

ดูตัวอย่างแผนภาพด้านล่าง ผู้ชมของคุณกำลังดูวิดีโอ และตัดสินใจจากช่วง 5 นาทีไปยัน 15 นาที อย่างไรก็ตาม จะมีช่วงพักโฆษณาเมื่อครบ 10 นาทีที่คุณต้องการให้พวกเขาดูก่อนจึงจะดูเนื้อหาหลังจากนั้นได้

หากต้องการแสดงช่วงพักโฆษณานี้ โปรดทำตามขั้นตอนต่อไปนี้

  1. ตรวจสอบว่าผู้ใช้ทำการค้นหาผ่านช่วงพักโฆษณาที่ไม่ได้ดูหรือไม่ และถ้าเป็นเช่นนั้น ให้พาผู้ใช้กลับไปที่ช่วงพักโฆษณา
  2. หลังจากช่วงพักโฆษณาสิ้นสุดแล้ว ให้กลับไปยังหน้าเดิม

ในแบบฟอร์มแผนภาพ จะมีลักษณะดังนี้

ต่อไปนี้คือวิธีนำเวิร์กโฟลว์นี้ใน IMA DAI SDK ไปใช้ดังที่ทำใน AdvancedExample

ป้องกันไม่ให้ผู้ใช้หยุดดูช่วงพักโฆษณา

ตรวจสอบว่าผู้ใช้ทำการค้นหาที่เลยช่วงพักโฆษณาที่ไม่ได้ดูไปหรือไม่ และถ้ามี ให้นำผู้ใช้กลับไปยังช่วงพักโฆษณา สำหรับตัวอย่างขั้นสูงของ iOS ให้ใช้การโต้ตอบของผู้ใช้กับ UI เพื่อตรวจจับเมื่อผู้ใช้ทำการค้นหา รักษาเวลาเริ่มต้นของการค้นหาไว้เพื่อตรวจสอบว่า ได้ผ่านช่วงพักโฆษณาที่ยังไม่ได้เล่นในการค้นหาหรือไม่ เมื่อผู้ใช้ปล่อยตัวควบคุมวิดีโอ ให้เปรียบเทียบเวลาปัจจุบันกับเวลาของช่วงพักโฆษณาล่าสุด หากช่วงพักโฆษณาอยู่หลังจากเวลาเริ่มต้นกรอ (หมายความว่าผู้ใช้ข้ามผ่านไปแล้ว) และโฆษณายังไม่ได้เล่น ให้เลื่อนกลับไปที่จุดเริ่มต้นของช่วงพักโฆษณา นอกจากนี้ ให้ตั้งค่าสถานะ Snapback เพื่อตรวจสอบภายหลังในเครื่องจัดการช่วงพักโฆษณาที่สมบูรณ์

- (IBAction)videoControlsTouchStarted:(id)sender {
  self.seekStartTime = self.contentPlayer.currentTime;
}

- (IBAction)videoControlsTouchEnded:(id)sender {
  self.seekEndTime = CMTimeMake(self.progressBar.value, 1);
  IMACuepoint *lastCuepoint =
      [self.streamManager previousCuepointForStreamTime:CMTimeGetSeconds(self.seekEndTime)];
  if (!lastCuepoint.played && (lastCuepoint.startTime > CMTimeGetSeconds(self.seekStartTime))) {
    self.snapbackMode = YES
    // Add 1 to the seek time to get the keyframe at the start of the ad to be your landing place.
    [self.contentPlayer seekToTime:CMTimeMakeWithSeconds(lastCuepoint.startTime + 1, NSEC_PER_SEC)];
  }
}

นำผู้ใช้กลับไปยังการค้นหาเดิม

ในเครื่องจัดการช่วงพักโฆษณา ให้ตรวจสอบว่ามีการเล่นช่วงพักโฆษณาก่อนหน้าอันเป็นผลมาจาก Snapback หรือไม่ หากใช่ ให้นำผู้ใช้กลับไปยังตำแหน่งที่ต้องการในตอนแรก (ตราบใดที่ไม่อยู่ในช่วงช่วงพักโฆษณาที่เพิ่งเล่นไป)

- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
  switch (event.type) {
    case kIMAAdEvent_AD_BREAK_ENDED: {
      if (self.snapbackMode) {
        self.snapbackMode = NO;
        if (CMTimeCompare(self.seekEndTime, self.contentPlayer.currentTime)) {
          [self.contentPlayer seekToTime:self.seekEndTime];
        }
      }
      break;
    }
  }
}