Jako wydawca wideo możesz uniemożliwić widzom przeszukując reklamy w trakcie filmu. Gdy użytkownik przegląda przerwę na reklamę, możesz wrócić do początku przerwy na reklamę, do miejsca, w którym chcesz przewinąć, po zakończeniu przerwy na reklamę. Ten jest nazywany „przyciąganiem”.
Przykład znajdziesz na diagramie poniżej. Widz ogląda film, i postanawia przejść od 5-minutowego filmu do piętnastego. Jednak po 10 minucie reklamy następuje przerwa na reklamę, aby zapoznać się z treścią, zanim obejrzą treść po filmie:
Aby wyświetlić tę przerwę na reklamę, wykonaj te czynności:
- Sprawdź, czy użytkownik przeprowadził przewijanie, które przeskoczyło poza nieobejrzaną przerwę na reklamę. Jeśli tak, wróć do przerwy na reklamę.
- Po zakończeniu przerwy na reklamę wróć do początkowego przewijania.
Na diagramie wygląda to tak:
Oto jak zaimplementować snapback za pomocą pakietu IMA DAI SDK, jak pokazano w przykładzie zaawansowanym.
Zapobiegaj pozostawaniu przez przewijanie nieobejrzanej przerwy na reklamę
sprawdzić, czy użytkownik przeprowadził przewijanie, które nie minęło od nieobejrzanej przerwy na reklamę;
Jeśli tak, wróć do przerwy na reklamę.
Przykład zaawansowanego systemu tvOS korzysta z AVPlayerViewController
,
który udostępnia metodę przekazywania informacji o tym, że użytkownik przeprowadził wyszukiwanie.
Jeśli czas rozpoczęcia przewijania przypada przed poprzednią przerwą na reklamę (czyli
użytkownik przeskoczył ją obok) i ta przerwa nie została jeszcze odtworzona,
przewijają je do początku przerwy na reklamę. Zanotuj również czas rozpoczęcia
początkowa prośba o przejście do późniejszego sprawdzenia w module obsługi ad-break-did-end
:
- (void)playerViewController:(AVPlayerViewController *)playerViewController willResumePlaybackAfterUserNavigatedFromTime:(CMTime)oldTime toTime:(CMTime)targetTime { if (self.streamManager) { IMACuepoint *prevCuepoint = [self.streamManager previousCuepointForStreamTime:CMTimeGetSeconds(targetTime)]; if (prevCuepoint && !prevCuepoint.isPlayed && oldTime < prevCuepoint.startTime) { self.userSeekTime = CMTimeGetSeconds(targetTime); [self.playerViewController.player seekToTime:CMTimeMakeWithSeconds( prevCuepoint.startTime, NSEC_PER_SEC) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; } } }
Przywróć użytkownikowi pierwotne wyszukiwanie
Osobie, której przekazujesz dostęp do wydarzenia, zmień zgłoszenie AD_BREAK_ENDED
, aby sprawdzić, czy
w wyniku wywołania zwrotnego została odtworzona poprzednia przerwa na reklamę.
- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event { NSLog(@"StreamManager event (%@).", event.typeString); switch (event.type) { // Your other events go here as normal. case kIMAAdEvent_AD_BREAK_ENDED: { if (self.userSeekTime > 0) { self.playerViewController.player seekToTime:CMTimeMakeWithSeconds(self.userSeekTime, NSEC_PER_SEC) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; self.userSeekTime = 0; // existing handling for AD_BREAK_ENDED goes here. break; } // And so on for other events. default: break; } }