بصفتك ناشر فيديوهات، قد تريد منع المشاهدين من تخطّي "الإعلانات أثناء التشغيل". عندما يتخطّى المستخدم فاصلًا إعلانيًا، يمكنك إعادته إلى بداية هذا الفاصل، ثم إعادته إلى موضع التقديم السريع بعد انتهاء الفاصل. تُعرف هذه الميزة باسم "الرجوع السريع".
اطّلِع على الرسم البياني أدناه كمثال. يشاهد المستخدم فيديو ويقرّر الانتقال من الدقيقة 5 إلى الدقيقة 15. ومع ذلك، هناك فاصل إعلاني عند الدقيقة 10 تريد أن يشاهده المستخدمون قبل أن يتمكّنوا من مشاهدة المحتوى بعده:
لعرض فاصل إعلاني، اتّبِع الخطوات التالية:
- تحقَّق مما إذا كان المستخدم قد نفّذ عملية بحث تجاوزت فاصل إعلاني لم تتم مشاهدته، وإذا كان الأمر كذلك، أعِد المستخدم إلى الفاصل الإعلاني.
- بعد انتهاء فاصل الإعلانات، أعِد المستخدمين إلى موضع البحث الأصلي.
في شكل رسم بياني، يبدو ذلك على النحو التالي:
في ما يلي كيفية تنفيذ سير العمل هذا في حزمة تطوير البرامج (SDK) الخاصة بميزة "الإعلانات الديناميكية أثناء البث" في "إعلانات الوسائط التفاعلية"، كما هو موضّح في AdvancedExample.
منع التقديم السريع من تخطّي فاصل إعلاني بدون مشاهدته
تحقَّق مما إذا كان المستخدم قد نفّذ عملية بحث تجاوزت فاصل إعلاني لم تتم مشاهدته، وإذا كان الأمر كذلك، أعِد توجيهه إلى الفاصل الإعلاني. بالنسبة إلى مثال iOS Advanced، استخدِم تفاعل المستخدم مع واجهة المستخدم الخاصة بك لرصد الوقت الذي نفَّذ فيه عملية بحث سريع. الاحتفاظ بوقت بدء البحث للتحقّق مما إذا كان المستخدم قد تخطّى فاصل إعلاني لم يتم تشغيله أثناء البحث عندما يحرّر المستخدم عناصر التحكّم في الفيديو، قارِن الوقت الحالي بوقت آخر فاصل إعلاني. إذا كان فاصل الإعلانات يقع بعد وقت بدء البحث (ما يعني أنّ المستخدم قد تخطّاه) ولم يتم تشغيله بعد، يجب إعادة المستخدم إلى بداية فاصل الإعلانات. اضبط أيضًا علامة snapback للتحقّق لاحقًا في معالج اكتمال فاصل الإعلانات:
- (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)];
}
}
إعادة المستخدم إلى موضع البحث الأصلي
في معالج انتهاء فاصل الإعلانات، تحقَّق مما إذا تم تشغيل الفاصل السابق نتيجةً لميزة "الرجوع السريع". في هذه الحالة، أعِد المستخدم إلى الموضع الذي كان يحاول الانتقال إليه في البداية (ما دام هذا الموضع ليس في منتصف فاصل الإعلانات الذي تم تشغيله للتو):
- (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;
}
}
}