Snapback hareketi

Video yayıncısı olarak, izleyicilerinizin videonun ortasında gösterilen reklamları geçmesini önlemek isteyebilirsiniz. Kullanıcı reklam arasını geçecek şekilde arama yaptığında, bu kullanıcıyı reklam arasının başlangıcına 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. dakikada, kullanıcının içeriği izleyebilmesi için 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ını atlayan bir arama gerçekleştirip gerçekleştirmediğini kontrol edin. Bu şekilde devam ediyorsa 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, grafik şu şekilde görünür:

Bu iş akışını, AdvancedExample bölümünde 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 işlemi gerçekleştirip gerçekleştirmediğini kontrol edin ve böyle bir 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ılmamışsa istedikleri 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ı asıl konumuna geri getirmek

Şimdi bir onAdBreakEnded etkinliği aldığınızda snapBackTime özelliğinin ayarlanıp ayarlanmadığını kontrol edin. Öyleyse kullanıcıyı akışta ilgili noktaya yönlendirin. Az önce izledikleri reklam arası reklam atlamanın bir 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;
}