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