ביטול

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

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

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

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

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

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

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

עליכם לבדוק אם המשתמש הפעיל הרצה מעבר להפסקה למודעות שלא נצפה, ואם כן, להחזיר אותו להפסקה למודעות. בדוגמה המתקדמת של tvOS נעשה שימוש ב-AVPlayerViewController, שכוללת שיטת הענקת גישה כדי ליידע אתכם שהמשתמש ביצע הרצה. אם שעת ההתחלה של החיפוש חלה לפני ההפסקה הקודמת למודעה (כלומר, המשתמש קפץ מעבר לה) וההפסקה עדיין לא שולמה, הזינו אותה חזרה לתחילת ההפסקה למודעה. בנוסף, מתעדים את שעת ההתחלה של הניסיון לבדוק בשלב מאוחר יותר ב-handler של ad-break-did-end:

- (void)playerViewController:(AVPlayerViewController *)playerViewController
  willResumePlaybackAfterUserNavigatedFromTime:(CMTime)oldTime
                      toTime:(CMTime)targetTime {
  if (self.streamManager) {
    IMACuepoint *prevCuepoint = [self.streamManager
        previousCuepointForStreamTime:CMTimeGetSeconds(targetTime)];
    if (prevCuepoint && !prevCuepoint.isPlayed && oldTime < prevCuepoint.startTime) {
      self.userSeekTime = CMTimeGetSeconds(targetTime);
      [self.playerViewController.player seekToTime:CMTimeMakeWithSeconds(
                 prevCuepoint.startTime, NSEC_PER_SEC)
                 toleranceBefore:kCMTimeZero
                  toleranceAfter:kCMTimeZero];
    }
  }
}

החזרת המשתמש לדילוג המקורי שלו

בהענקת גישה לאירוע, אפשר לשנות את הרישיות של AD_BREAK_ENDED כדי לבדוק אם ההפסקה הקודמת למודעות הופעלה כתוצאה מ-Snapback.


- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
  NSLog(@"StreamManager event (%@).", event.typeString);
  switch (event.type) {
    // Your other events go here as normal.
    case kIMAAdEvent_AD_BREAK_ENDED: {
      if (self.userSeekTime > 0) {
        self.playerViewController.player
            seekToTime:CMTimeMakeWithSeconds(self.userSeekTime, NSEC_PER_SEC)
        toleranceBefore:kCMTimeZero
        toleranceAfter:kCMTimeZero];
        self.userSeekTime = 0;

      // existing handling for AD_BREAK_ENDED goes here.
      break;
    }
    // And so on for other events.
    default:
      break;
  }
}