ביטול

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

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

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

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

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

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

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

עליכם לבדוק אם המשתמש הפעיל הרצה מעבר להפסקה למודעות שלא נצפה, ואם כן, להחזיר אותו להפסקה למודעות. ב-Android SDK, משתמשים באובייקט PlayerControl כדי לזהות דילוג. כשהמשתמש מבצע חיפוש, מפעילים את השיטה onSeek() של SampleHlsVideoPlayerCallback שמוטמעת על ידי SampleAdsWrapper. השיטה הזו (שמוצגת בהמשך) בודקת את נקודת הסימון לפני זמן החיפוש של המשתמש. אם לא מופעל מצב כזה, נסו להתחיל את ההפסקה למודעה במקום להתחיל את נקודת ההרצה הרצויה ולשמור את נקודת ההרצה הרצויה ב-snapBackTime.

@Override
public void onSeek(int timeMillis) {
  double timeToSeek = timeMillis;
  if (streamManager != null) {
    CuePoint cuePoint =
        streamManager.getPreviousCuePointForStreamTime(timeMillis / 1000);
    if (cuePoint != null && !cuePoint.isPlayed()) {
      snapBackTime = timeToSeek / 1000.0; // Update snapback time.
      // Missed cue point, so snap back to the beginning of cue point.
      timeToSeek = cuePoint.getStartTime() * 1000;
      videoPlayer.seek(Math.round(timeToSeek));
      videoPlayer.setCanSeek(false);
      return;
    }
  }
  videoPlayer.seek(Math.round(timeToSeek));
}

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

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

@Override
public void onAdBreakEnded() {
  // Re-enable player controls.
  videoPlayer.setCanSeek(true);
  videoPlayer.enableControls(true);
  if (snapBackTime > 0) {
    videoPlayer.seek(Math.round(snapBackTime * 1000));
  }
  snapBackTime = 0;
}