بصفتك ناشر فيديوهات، قد تريد منع المشاهدين من تخطّي "الإعلانات أثناء التشغيل". عندما يتخطّى المستخدم فاصلًا إعلانيًا، يمكنك إعادته إلى بداية هذا الفاصل، ثم إعادته إلى موضع التقديم السريع بعد انتهاء الفاصل. تُعرف هذه الميزة باسم "العودة إلى الإعلان".
اطّلِع على الرسم البياني أدناه كمثال. يشاهد المستخدم فيديو ويقرّر الانتقال من الدقيقة 5 إلى الدقيقة 15. ومع ذلك، هناك فاصل إعلاني عند الدقيقة 10 يجب أن يشاهده المستخدمون قبل أن يتمكّنوا من مشاهدة المحتوى بعده:

لعرض فاصل إعلاني، اتّبِع الخطوات التالية:
- تحقَّق مما إذا كان المستخدم قد نفّذ عملية بحث تجاوزت فاصل إعلاني لم تتم مشاهدته، وإذا كان الأمر كذلك، أعِد توجيهه إلى الفاصل الإعلاني.
- بعد انتهاء فاصل الإعلانات، أعِد المستخدمين إلى موضع البحث الأصلي.
في شكل رسم بياني، يبدو ذلك على النحو التالي:

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