برگشتن به وقفه آگهی ردشده

پلاتفرم را انتخاب کنید: HTML5 Android iOS tvOS Roku

به‌عنوان ناشر ویدیو، ممکن است بخواهید از رد کردن آگهی‌های میان‌ویدیویی توسط بینندگان خود جلوگیری کنید. وقتی کاربر از وقفه آگهی رد می‌شود، می‌توانید او را به ابتدای آن وقفه آگهی برگردانید و سپس پس‌از تکمیل آن وقفه آگهی، او را به مکان رد شدن برگردانید. به این ویژگی «بازگشت سریع» می‌گویند.

به‌عنوان مثال، نمودار زیر را ببینید. بیننده شما درحال تماشای ویدیو است و تصمیم می‌گیرد از دقیقه ۵ به دقیقه ۱۵ برود. بااین‌حال، یک وقفه آگهی در دقیقه ۱۰ وجود دارد که می‌خواهید قبل‌از تماشای محتوای بعداز آن، آن را تماشا کنند:

برای نمایش این وقفه آگهی، مراحل زیر را انجام دهید:

  1. بررسی کنید آیا کاربر جستجویی انجام داده است که از وقفه آگهی تماشانشده عبور کرده است، و اگر چنین است، او را به وقفه آگهی برگردانید.
  2. پس‌از تکمیل وقفه آگهی، آن‌ها را به جستجوی اصلی‌شان برگردانید.

در قالب نمودار، این‌گونه به‌نظر می‌رسد:

در اینجا نحوه پیاده‌سازی snapback بااستفاده از IMA DAI 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;
  }
}