اسنپ ​​بک

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

به عنوان مثال، نمودار زیر را ببینید. بیننده شما در حال تماشای یک ویدیو است و تصمیم می گیرد از نقطه 5 دقیقه تا 15 دقیقه را جستجو کند. با این حال، یک وقفه تبلیغاتی در حد 10 دقیقه وجود دارد که می‌خواهید قبل از اینکه بتوانند محتوا را بعد از آن تماشا کنند، آن را تماشا کنند:

برای نمایش این استراحت تبلیغاتی، مراحل زیر را انجام دهید:

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

در شکل نمودار، به شکل زیر است:

در اینجا نحوه پیاده سازی این گردش کار در tvOS IMA 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 را تغییر دهید تا بررسی کنید که آیا وقفه تبلیغاتی قبلی در نتیجه snapback پخش شده است یا خیر.


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