Atlanan bir reklam arasına geri dönme

Platform seçin: HTML5 Android iOS tvOS Roku

Video yayıncısı olarak, izleyicilerinizin videonun ortasında gösterilen reklamları atlamasını engellemek isteyebilirsiniz. Kullanıcı bir reklam arasını atladığında onu reklam arasının başlangıcına geri götürebilir ve reklam arası tamamlandıktan sonra daha önce gittiği oynatma konumuna döndürebilirsiniz. Bu özelliğe "geri sarma" denir.

Örnek olarak aşağıdaki şemaya bakın. İzleyiciniz bir video izlerken 5. dakikadan 15. dakikaya atlamaya karar veriyor. Ancak, 10. dakikada bir reklam arası var ve bu reklam arasını izlemeden sonraki içeriği izleyemezler:

Bu reklam arasını göstermek için aşağıdaki adımları uygulayın:

  1. Kullanıcının, izlenmemiş bir reklam arasını atlayarak ileri sarma işlemi yapıp yapmadığını kontrol edin. Yaptıysa kullanıcıyı reklam arasına geri götürün.
  2. Reklam arası tamamlandıktan sonra kullanıcıları orijinal oynatma konumlarına geri döndürün.

Bu durum, diyagramda şu şekilde görünür:

AdvancedExample'da gösterildiği gibi, IMA DAI SDK'sını kullanarak geri sarma özelliğini nasıl uygulayacağınız aşağıda açıklanmıştır.

İzleyicilerin, reklam arasını izlemeden geçmesini engelleme

Kullanıcının, izlenmemiş bir reklam arasını geçen bir sarma işlemi yapıp yapmadığını kontrol edin ve yaptıysa kullanıcıyı reklam arasına geri götürün. tvOS gelişmiş örneğinde, kullanıcının arama işlemi gerçekleştirdiğini bildiren bir temsilci yöntemi olan AVPlayerViewController kullanılır. Oynatma başlangıç zamanı önceki reklam arasından önceyse (yani kullanıcı reklam arasını atlamışsa) ve bu reklam arası henüz oynatılmamışsa kullanıcıyı reklam arasının başlangıcına geri götürün. Ayrıca, ad-break-did-end işleyicinizde daha sonra kontrol etmek için ilk istenen arama işleminin başlangıç zamanını da kaydedin:

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

Kullanıcıyı orijinal arama konumuna geri döndürme

Etkinlik temsilcinizde, önceki reklam arası geri sarma sonucunda oynatılıp oynatılmadığını kontrol etmek için AD_BREAK_ENDED durumunu değiştirin.


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