Snapback hareketi

Video yayıncısı olarak, izleyicilerin videonun ortasında gösterilen reklamlarınızı atlamasını engellemek isteyebilirsiniz. Kullanıcı reklam arasını geçmek için arama yaptığında bunları reklam arasının başına döndürebilir ve daha sonra bu reklam arası tamamlandıktan sonra kullanıcıları istediği konuma götürebilir. 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:

Bu iş akışını IMA DAI SDK'sında nasıl uygulayacağınız aşağıda açıklanmıştır: 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. iOS Advanced örneği için kullanıcının kullanıcı arayüzünüzle etkileşimini kullanın. algılaması kolaylaşıyor. Kontrol etmek için sarma başlangıç zamanını koruyun . Kullanıcı video denetimlerini serbest bırakır, şu anki zamanlarını videonun en son reklam arası gösterilir. Reklam arası, arama başlangıcından sonraya denk gelirse zamandır (yani kullanıcı atlamıştır) ve henüz oynatılmamıştır; başlangıcında izlemesi gerekir. Ayrıca, bir reklam atlama bayrağı ayarlayın reklam arası tamamlama işleyicinizde daha sonra kontrol etmek için:

- (IBAction)videoControlsTouchStarted:(id)sender {
  self.seekStartTime = self.contentPlayer.currentTime;
}

- (IBAction)videoControlsTouchEnded:(id)sender {
  self.seekEndTime = CMTimeMake(self.progressBar.value, 1);
  IMACuepoint *lastCuepoint =
      [self.streamManager previousCuepointForStreamTime:CMTimeGetSeconds(self.seekEndTime)];
  if (!lastCuepoint.played && (lastCuepoint.startTime > CMTimeGetSeconds(self.seekStartTime))) {
    self.snapbackMode = YES
    // Add 1 to the seek time to get the keyframe at the start of the ad to be your landing place.
    [self.contentPlayer seekToTime:CMTimeMakeWithSeconds(lastCuepoint.startTime + 1, NSEC_PER_SEC)];
  }
}

Kullanıcıyı asıl hedefine geri götürün

Reklam arası uçlu işleyicinizde, önceki ayrılması sonucu oynatıldı. Bu durumda, kullanıcıyı başlangıçta atlamaya çalıştığı yere geri döndürün (yeni oynatılan reklam arasının ortası olmadığı sürece):

- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
  switch (event.type) {
    case kIMAAdEvent_AD_BREAK_ENDED: {
      if (self.snapbackMode) {
        self.snapbackMode = NO;
        if (CMTimeCompare(self.seekEndTime, self.contentPlayer.currentTime)) {
          [self.contentPlayer seekToTime:self.seekEndTime];
        }
      }
      break;
    }
  }
}