Snapback hareketi

Video yayıncısı olarak, izleyicilerinizin şunları yapmasını engellemek isteyebilirsiniz: videonun ortasında gösterilen reklamlara geçmenizi sağlar. Kullanıcı bir reklam arasını atladığında kullanıcıyı reklam arasının başlangıcına geri götürebilir ve reklam arası tamamlandıktan sonra kullanıcıyı daha önce gittiği oynatma konumuna döndürebilirsiniz. Bu yeni bir özellik olduğunu göreceksiniz.

Örnek olarak aşağıdaki şemaya bakın. İzleyiciniz bir video izliyorsa ve 5 dakikadan 15. dakikaya geçmeye karar veriyor. Ancak 10. dakikada, istediğiniz bir reklam arası var içeriği izlemeden önce izlemesi için şu adımları izlemelidir:

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ı geçen bir arama yapıp yapmadığını kontrol edin. Gerekirse bunları reklam arasına geri döndürün.
  2. Reklam arası tamamlandıktan sonra reklamları orijinal konumuna geri döndürün.

Diyagram biçiminde bu, aşağıdaki gibi görünür:

Aşağıda gösterildiği gibi, IMA DAI SDK'sını kullanarak reklam görüntülemeyi AdvancedExample (Gelişmiş Örnek).

Sarma işleminin, reklam arasını izlenmeden bırakmasını önleme

Kullanıcının izlenmemiş bir reklam arasından geçen bir arama yapıp yapmadığını kontrol edin. Gerekirse bunları reklam arasına geri döndürün. tvOS gelişmiş örneği, AVPlayerViewController, Burada, kullanıcının bir arama işlemi gerçekleştirdiğini söyleyen bir yetki verme yöntemi bulunur. Arama başlangıç zamanı, önceki reklam arasından önce gelirse (yani geçen kullanıcı molayı atlarsa) ve bu ara henüz oynanmadıysa başlangıcında izlemesi gerekir. Ayrıca, dönüşüm hunisinin başlangıç ilk olarak ad-break-did-end işleyicinizde daha sonra kontrol etme isteğinde bulundu:

- (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ı asıl hedefine geri götürün

Etkinlik temsilcinizde, AD_BREAK_ENDED destek kaydını değiştirerek reklam arası, reklam kesintisinin sonucu olarak oynatılmıştır.


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