بازگشت به وقفه تبلیغاتی رد شده، بازگشت به وقفه تبلیغاتی رد شده، بازگشت به وقفه تبلیغاتی رد شده، بازگشت به وقفه تبلیغاتی رد شده

پلتفرم مورد نظر را انتخاب کنید: HTML5 اندروید 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 را تغییر دهید تا بررسی کنید که آیا وقفه تبلیغ قبلی در نتیجه 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;
  }
}