ביטול

כבעלי תוכן וידאו, כדאי לכם למנוע מהצופים לדלג על מודעות באמצע הסרטון (mid-roll). כשמשתמש לוחץ ועובר את ההפסקה למודעות, אפשר להחזיר אותם לתחילת ההפסקה למודעות, ואז לחזור אותם למיקום שבו הם מחפשים אחרי שההפסקה למודעות תסתיים. התכונה הזו נקראת 'חזרה למצב הקודם'.

כדוגמה, ראו את התרשים הבא. הצופה שלך צופה בסרטון ומחליטה להריץ את נקודת הזמן של 5 דקות עד 15 דקות. עם זאת, יש הפסקה למודעה בדקה של 10 הדקות שרצית כדי לאפשר להם לצפות בתוכן לאחר מכן:

כדי להציג את ההפסקה למודעה הזו, יש לבצע את השלבים הבאים:

  1. בדקו אם המשתמש הפעיל דילוג שחלף מעבר להפסקה למודעות שלא נצפה, ואם כן, החזרו אותם להפסקת המודעות.
  2. כשההפסקה למודעה תסתיים, צריך להחזיר אותם לחיפוש המקורי.

בתרשים, זה נראה כך:

כך מטמיעים את תהליך העבודה הזה ב-IMA DAI SDK, כפי שנעשה ב- AdvancedExample (דוגמה מתקדמת).

מניעת דילוג על הפסקה למודעה בלי לצפות בה

בודקים אם המשתמש ביצע דילוג שחלף הפסקה למודעה שלא נצפה, ואם כן, החזרו אותם להפסקת המודעות. בדוגמה ל-iOS Advanced משתמשים באינטראקציה של המשתמש עם ממשק המשתמש. לזהות מתי הוא ביצע חיפוש. צריך לשמור את שעת ההתחלה של הדילוג כדי לבדוק אם הם העבירו הפסקה למודעה שלא הופעלה במסגרת החיפוש. כשהמשתמש משיק את לחצני הסרטונים, משווה את הזמן הנוכחי שלהם לזמן ההפסקה האחרונה למודעה. אם ההפסקה למודעה מתרחשת אחרי תחילת הדילוג זמן (כלומר המשתמש דילג על פניו) והוא עדיין לא הופעל, להחזיר אותם לתחילת ההפסקה למודעות. בנוסף, יש להגדיר דגל Snapback כדי לבדוק מאוחר יותר ב-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 של ההפסקות למודעות, בודקים אם ההפסקה הופעלה כתוצאה מהצמדה (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;
    }
  }
}