כבעלי אתרים בווידאו, ייתכן שתרצו למנוע מהצופים שלכם לדלג על מודעות באמצע סרטון (mid-roll). כשהמשתמש רץ מעבר להפסקה למודעות, אפשר להחזיר אותו לתחילת ההפסקה למודעה ולחזור למיקום הרצוי בסיום ההפסקה. התכונה הזו נקראת 'snapback'.
כדוגמה, עיין בתרשים הבא. הצופה שלכם צופה בסרטון, ומחליט לדלג מסימון 5 הדקות לסימון של 15 הדקות. עם זאת, יש הפסקה למודעה בתום פרק הזמן של 10 הדקות שאתם רוצים שהם יצפו בו, לפני שיוכלו לצפות בתוכן לאחר מכן:
כדי להציג את ההפסקה למודעה הזו:
- בודקים אם המשתמש ביצע דילוג מעבר להפסקה למודעות שלא נצפתה, ואם כן, החזירו אותו להפסקה למודעות.
- בסיום ההפסקה למודעה, מחזירים את הדילוגים לדילוג המקורי.
בדיאגרמה, התהליך נראה כך:
כך יטמיעו את ה-Snapack באמצעות IMA DAI SDK, כפי שמתואר בדוגמה המתקדמת.
מניעת מעבר של הפסקה למודעה ללא צפייה
בודקים אם המשתמש ביצע דילוג מעבר להפסקה למודעות שלא נצפה, ואם כן, להחזיר אותו להפסקה למודעות. הדוגמה המתקדמת של Roku מסתמכת על לחיצות על לחצנים מרחוק כדי לבקש מהמשתמש - בכל פעם שהמשתמש לוחץ על הלחצן 'הבא', הוא מזנק קדימה בזרם במספר מוגדר של שניות. אותה שיטה שמטפלת בקפיצה הזו גם בודקת אם הקפיצה חלה בזמן ההפסקה למודעה או מעבר לה, ואם כן, היא שולחת את המשתמש לתחילת ההפסקה למודעה:
Function handleFastForward(player as Object, streamManager as Object, updatedTime As Integer)
previousAd = streamManager.getPreviousCuePoint(updatedTime)
If previousAd = Invalid or previousAd.hasPlayed
player.seek(updatedTime * 1000)
Else If previousAd.start > player.currentTime
player.isSnapback = True
player.timeAfterSnapback = updatedTime
player.seek(previousAd.start * 1000 + 1000)
End If
End Function
החזרת המשתמש לדילוג המקורי
ב-handler של adBreakEnded
, בודקים אם ההפסקה הקודמת למודעות הופעלה כתוצאה מהצמדה. במקרה כזה, נסו להחזיר את המשתמש למקום שהוא ניסה לחפש בהתחלה (כל עוד זה לא היה באמצע ההפסקה למודעה שהוצגה עכשיו):
player.adBreakEnded = Function(adBreakInfo as Object)
If m.isSnapback
m.seek(m.timeAfterSnapback * 1000)
m.isSnapback = False
End If
End Function