Snapback hareketi

Video yayıncısı olarak, izleyicilerinizin videonun ortasında gösterilen reklamları geçmesini önlemek isteyebilirsiniz. Kullanıcı bir reklam arasını geçtikten sonra arama yaptığında reklam arasının başlangıcına geri götürebilir ve reklam arası tamamlandıktan sonra daha önce gittiği oynatma konumuna geri döndürebilirsiniz. Bu özelliğe "snapback" denir.

Örnek olarak aşağıdaki şemaya bakın. İzleyiciniz bir video izliyor ve 5 dakika ile 15 dakika arasında geçiş yapmaya karar veriyor. Bununla birlikte, 10 dakika sonra içeriği izleyebilmek için önce izlemesini istediğiniz bir reklam arası vardır:

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

  1. Kullanıcının izlenmemiş bir reklam arasından atlayan bir arama çalıştırıp çalıştırmadığını kontrol edin. Bu durumda, kullanıcıyı reklam arasına geri götürün.
  2. Reklam arası tamamlandıktan sonra, reklamları asıl konumlarına döndürün.

Diyagram biçiminde, bu şöyle görünür:

Bu iş akışını, AdvancedExample'te gösterildiği gibi, IMA DAI SDK'sında nasıl uygulayacağınız aşağıda açıklanmıştır.

Aramanın, reklam arasını izlenmeden bırakmasını önleme

Kullanıcının izlenmemiş bir reklam arasından geçen bir arama gerçekleştirip gerçekleştirmediğini kontrol edin. Bu durumda, kullanıcıyı reklam arasına geri götürün. iOS Gelişmiş örneğinde, arama yaptıklarını algılamak için kullanıcının kullanıcı arayüzüyle etkileşimini kullanın. Arama sırasında oynatılmamış bir reklam arasını geçip geçmediğini kontrol etmek için arama başlangıç zamanını koruyun. Kullanıcı video kontrollerini etkinleştirdiğinde, kullanıcının geçerli zamanını en son reklam arasının zamanıyla karşılaştırın. Reklam arası, arama başlangıç zamanından sonra düşerse (kullanıcı onu atlamışsa) ve henüz oynatılmamışsa reklam arasının başına geri dönersiniz. Ayrıca, daha sonra reklam arası tam işleyicinizde kontrol etmek için bir "Snapback flag'i" ayarlayın:

- (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ı ilk aradığı yere geri götürmek

Reklam arası son işleyicinizde, önceki aranın "sıkıştırma" sonucu oynatılıp oynatılmadığını kontrol edin. Bu durumda, kullanıcıyı başlangıçta gitmek istedikleri yere geri döndürün (az önce 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;
    }
  }
}