Jako wydawca filmów możesz chcieć zapobiec wyświetlaniu reklam w trakcie filmu. Gdy użytkownik przechodzi do wyników wyszukiwania poza przerwą na reklamę, możesz cofnąć się do początku przerwy na reklamę i wrócić do miejsca, w którym znajdował się wyszukiwane hasło po zakończeniu przerwy na reklamę. Funkcja ta nosi nazwę „snapback”.
Przykład znajduje się na diagramie poniżej. Widz ogląda film i postanawia przewinąć od znacznika 5 minut do 15 minut. Po 10 minutach filmu pojawia się przerwa na reklamę, którą użytkownik chce obejrzeć, zanim będzie mógł obejrzeć kolejną:
Aby wyświetlać tę przerwę na reklamę, wykonaj te czynności:
- Sprawdź, czy użytkownik uruchomił wyszukiwanie, które przekroczyło nieobejrzaną przerwę na reklamę, a jeśli tak, wróć do przerwy 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 IMA DAI SDK w sposób podany w AdvancedExample.
Zapobieganie wyświetlaniu przerwy na reklamę przez wyszukiwanie
Sprawdź, czy użytkownik uruchomił wyszukiwanie, które przekroczyło nieobejrzaną przerwę na reklamę, a jeśli tak, przywróć mu przerwę na reklamę.
Aby wykryć przewijanie, w pakiecie SDK Androida użyj obiektu PlayerControl
.
Gdy użytkownik wykonuje wyszukiwanie, aktywuj metodę onSeek()
obiektu SampleHlsVideoPlayerCallback
zaimplementowanego przez SampleAdsWrapper
.
Ta metoda (pokazana poniżej) sprawdza punkt wstawienia reklamy przed czasem wyszukiwania użytkownika. Jeśli reklama nie jest odtworzona, przejdź do początku przerwy na reklamę zamiast początkowego żądanego punktu wyszukiwania i zapisz ten punkt 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żytkownika do pierwotnego wyszukiwania.
Teraz po otrzymaniu zdarzenia onAdBreakEnded
sprawdź, czy jest ustawione snapBackTime
. Jeśli tak, skieruj użytkownika do tego momentu, ponieważ przerwa na reklamę, którą właśnie obejrzał, była wynikiem przywrócenia:
@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;
}