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'de gösterildiği gibi Android IMA SDK'da 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. Android SDK'da sarmayı algılamak için PlayerControl nesnesini kullanın. Kullanıcı arama yaptığında, SampleAdsWrapper tarafından uygulanan SampleHlsVideoPlayerCallback için onSeek() yöntemini tetikleyin. Bu yöntem (aşağıda gösterilmektedir), kullanıcının arama zamanından önce işaret noktasını kontrol eder. Oynatılmazsa, istenen ilk arama noktası yerine ilgili reklam arasının başlangıcına gidin ve istenen arama noktasını snapBackTime konumuna kaydedin.

@Override
public void onSeek(int timeMillis) {
  double timeToSeek = timeMillis;
  if (streamManager != null) {
    CuePoint cuePoint =
        streamManager.getPreviousCuePointForStreamTime(timeMillis / 1000);
    if (cuePoint != null && !cuePoint.isPlayed()) {
      snapBackTime = timeToSeek / 1000.0; // Update snapback time.
      // Missed cue point, so snap back to the beginning of cue point.
      timeToSeek = cuePoint.getStartTime() * 1000;
      videoPlayer.seek(Math.round(timeToSeek));
      videoPlayer.setCanSeek(false);
      return;
    }
  }
  videoPlayer.seek(Math.round(timeToSeek));
}

Kullanıcıyı ilk aradığı yere geri götürmek

Şimdi bir onAdBreakEnded etkinliği aldığınızda, snapBackTime ayarlı olup olmadığını kontrol edin. Öyleyse kullanıcıyı akışta ilgili noktaya yönlendirin. Çünkü az önce izledikleri reklam arası reklam atlamanın sonucudur:

@Override
public void onAdBreakEnded() {
  // Re-enable player controls.
  videoPlayer.setCanSeek(true);
  videoPlayer.enableControls(true);
  if (snapBackTime > 0) {
    videoPlayer.seek(Math.round(snapBackTime * 1000));
  }
  snapBackTime = 0;
}