Snapback

Jako wydawca filmów możesz chcieć uniemożliwić widzom oglądanie Twoich reklam w trakcie filmu. Gdy użytkownik przeszukuje miejsce poza przerwą na reklamę, możesz cofnąć tę przerwę na początek przerwy na reklamę, a potem wrócić do miejsca przeszukania po zakończeniu przerwy na reklamę. Ta funkcja nosi nazwę „snapback”.

Przykład znajduje się na poniższym diagramie. Widz ogląda film i postanawia przewinąć film od 5 do 15 minut. Po 10 minutach następuje przerwa na reklamę, którą widzowie muszą obejrzeć, zanim będą mogli obejrzeć kolejne treści:

Aby wyświetlać tę przerwę na reklamę, wykonaj te czynności:

  1. Sprawdź, czy użytkownik wykonał wyszukiwanie, które przekroczyło nieobejrzaną przerwę na reklamę, a jeśli tak, przywróć mu przerwę na reklamę.
  2. Po zakończeniu przerwy na reklamę wróć do pierwotnego wyszukiwania.

W formie diagramu wygląda to tak:

Oto jak wdrożyć ten przepływ pracy w pakiecie Android IMA SDK w sposób podany w artykule AdvancedExample.

Zapobieganie pozostawianiu przerwy na reklamę niewykorzystaną przez przewijanie

Sprawdź, czy użytkownik wykonał wyszukiwanie, które przekroczyło nieobejrzaną przerwę na reklamę, a jeśli tak, przywróć mu przerwę na reklamę. W pakiecie SDK do Androida użyj obiektu PlayerControl, aby wykrywać przewijanie. Gdy użytkownik wykonuje wyszukiwanie, aktywuj metodę onSeek() obiektu SampleHlsVideoPlayerCallback zaimplementowaną przez SampleAdsWrapper. Ta metoda (przedstawiona poniżej) sprawdza punkt wstawienia przed rozpoczęciem wyszukiwania przez użytkownika. Jeśli reklama nie jest odtworzona, przewiń do początku przerwy na reklamę zamiast do początkowego żądanego punktu przewijania i zapisz go w polu snapBackTime.

@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));
}

Przywróć użytkownikowi pierwotne wyszukiwanie

Teraz po wywołaniu zdarzenia onAdBreakEnded sprawdź, czy jest ustawione snapBackTime. Jeśli tak, skieruj użytkownika do tego momentu, ponieważ przerwa na reklamę, którą oglądał, była wynikiem działania przerwy na reklamę:

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