מוציאים לאור של סרטונים יכולים לרצות למנוע מהצופים לדלג על מודעות באמצע הסרטון. כשמשתמש מדלג מעבר להפסקת פרסום, אפשר להחזיר אותו לתחילת הפסקת הפרסום הזו, ואז להחזיר אותו למיקום הדילוג אחרי שההפסקה מסתיימת. התכונה הזו נקראת 'חזרה מהירה'.
לדוגמה, ראו את התרשים הבא. הצופה צופה בסרטון ומחליט לדלג מנקודת הזמן של 5 דקות לנקודת הזמן של 15 דקות. עם זאת, יש הפסקת פרסומות אחרי 10 דקות צפייה, ואתם רוצים שהצופים יצפו בה לפני שהם יוכלו לצפות בתוכן שאחריה:
כדי להציג את ההפסקה המסחרית הזו, פועלים לפי השלבים הבאים:
- בודקים אם המשתמש הפעיל מעבר מהיר שדילג על הפסקת פרסום שהוא לא צפה בה, ואם כן, מחזירים אותו להפסקת הפרסום.
- אחרי שהפסקת הפרסום מסתיימת, מחזירים את הצופים למיקום המקורי בסרטון.
בתרשים, זה נראה כך:
כך מטמיעים את תהליך העבודה הזה ב-IMA DAI SDK, כמו שנעשה ב-AdvancedExample.
איך מונעים מעבר מהיר קדימה שגורם לדילוג על הפסקה למודעה
בודקים אם המשתמש הפעיל מעבר מהיר קדימה שדילג על הפסקת פרסום שהוא לא צפה בה, ואם כן, מחזירים אותו להפסקת הפרסום. בדוגמה המתקדמת ל-iOS, משתמשים באינטראקציה של המשתמש עם ממשק המשתמש כדי לזהות מתי הוא הפעיל מעבר לנקודה מסוימת בסרטון. שומרים את זמן ההתחלה של ההזזה כדי לבדוק אם המשתמשים דילגו על הפסקת פרסום שלא הוצגה במהלך ההזזה. כשמשתמש משחרר את אמצעי הבקרה של הסרטון, משווים את השעה הנוכחית לשעה של ההפסקה המסחרית האחרונה. אם ההפסקה לפרסומות מתרחשת אחרי שעת ההתחלה של ההעברה למיקום אחר (כלומר, המשתמש דילג מעליה) והיא עדיין לא הופעלה, צריך להעביר את המשתמש בחזרה לתחילת ההפסקה לפרסומות. בנוסף, מגדירים דגל של חזרה מהירה כדי לבדוק בהמשך ב-handler של השלמת הפסקת הפרסום:
- (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)];
}
}
החזרת המשתמש למיקום המקורי שלו בסרטון
ב-handler של סיום הפסקת הפרסומות, בודקים אם ההפסקה הקודמת הופעלה כתוצאה של חזרה מהירה. במקרה כזה, צריך להחזיר את המשתמש למיקום שאליו הוא ניסה להגיע מלכתחילה (בתנאי שזה לא היה באמצע הפסקת הפרסומות שהסתיימה):
- (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;
}
}
}