قبعة سناباك

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

كمثال، انظر الرسم التخطيطي أدناه. إذا كان المستخدم يشاهد فيديو ويقرر الانتقال من علامة 5 دقائق إلى 15 دقيقة. ومع ذلك، هناك فاصل إعلاني عند الوصول إلى علامة الـ 10 دقائق التي تريد ليتمكّنوا من مشاهدة المحتوى بعد انتهائه:

لعرض هذه الفاصل الإعلاني، اتّبِع الخطوات التالية:

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

وفي شكل الرسم التخطيطي، يبدو ذلك كما يلي:

في ما يلي كيفية تنفيذ سير العمل هذا في حزمة تطوير البرامج لإدراج إعلان ديناميكي لإعلانات الوسائط التفاعلية، كما تم في AdvancedExample.

منع التمرير حتى لا تتم مشاهدة فاصل إعلاني

تحقّق مما إذا كان المستخدم قد أجرى عملية بحث تجاوزت فاصل إعلاني لم تتم مشاهدته. وفي هذه الحالة، ارجع إلى الفاصل الإعلاني. بالنسبة إلى مثال iOS Advanced (الإصدار المتقدّم)، استخدِم تفاعل المستخدم مع واجهة المستخدم. لرصد وقت إجراء عملية البحث الاحتفاظ بوقت بدء التقديم/الترجيع للتحقّق إذا اجتازوا فاصلاً إعلانيًا لم يتم تشغيله في عملية البحث. عندما يجرّب تصدر عناصر التحكم في الفيديو، وقارن وقتها الحالي بوقت آخر فاصل إعلاني إذا وقع الفاصل الإعلاني بعد بدء عملية التقديم/الترجيع الوقت (أي أن المستخدم تجاوزها) ولم يتم تشغيلها بعد، اطلبها من جديد إلى بداية الفاصل الإعلاني. أيضًا، اضبط علامة الرجوع للاطّلاع عليه لاحقًا في معالِج اكتمال الفاصل الإعلاني:

- (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;
    }
  }
}