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:
- Sprawdź, czy użytkownik wykonał wyszukiwanie, które przekroczyło nieobejrzaną przerwę na reklamę, a jeśli tak, przywróć mu przerwę na reklamę.
- 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;
}