ביטול

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

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

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

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

בדיאגרמה, הנתונים ייראו כך:

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

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

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