ในฐานะผู้เผยแพร่โฆษณาวิดีโอ คุณอาจต้องการป้องกันไม่ให้ผู้ชมดูผ่านโฆษณาตอนกลางของคุณ เมื่อผู้ใช้เลื่อนผ่านช่วงพักโฆษณาไปแล้ว คุณสามารถนำผู้ใช้กลับไปยังจุดเริ่มต้นของช่วงพักโฆษณาได้ จากนั้นจึงนำผู้ใช้กลับไปยังตำแหน่งเดิมหลังจากช่วงพักโฆษณาสิ้นสุดลง คุณลักษณะนี้เรียกว่า "snapback"
ดูตัวอย่างแผนภาพด้านล่าง ผู้ชมของคุณกำลังดูวิดีโอ และตัดสินใจจากช่วง 5 นาทีไปยัน 15 นาที อย่างไรก็ตาม จะมีช่วงพักโฆษณาเมื่อครบ 10 นาทีที่คุณต้องการให้พวกเขาดูก่อนจึงจะดูเนื้อหาหลังจากนั้นได้
หากต้องการแสดงช่วงพักโฆษณานี้ โปรดทำตามขั้นตอนต่อไปนี้
- ตรวจสอบว่าผู้ใช้ทำการค้นหาผ่านช่วงพักโฆษณาที่ไม่ได้ดูหรือไม่ และถ้าเป็นเช่นนั้น ให้พาผู้ใช้กลับไปที่ช่วงพักโฆษณา
- หลังจากช่วงพักโฆษณาสิ้นสุดแล้ว ให้กลับไปยังหน้าเดิม
ในแบบฟอร์มแผนภาพ จะมีลักษณะดังนี้
ต่อไปนี้คือวิธีนำเวิร์กโฟลว์นี้ใน 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;
}
}
}