Sebagai penayang video, Anda mungkin ingin mencegah mencari selain iklan mid-roll Anda. Saat pengguna mencari setelah jeda iklan, Anda dapat mengarahkan mereka kembali ke awal jeda iklan, lalu mereka ke lokasi pencarian setelah jeda iklan selesai. Ini fitur disebut "snapback."
Sebagai contoh, lihat diagram di bawah ini. Penonton Anda sedang menonton video, dan memutuskan untuk mencari dari detik 5 ke detik 15. Namun, ada jeda iklan pada tanda 10 menit yang ingin Anda yang harus mereka tonton sebelum mereka dapat menonton konten setelahnya:
Untuk menampilkan jeda iklan ini, lakukan langkah-langkah berikut:
- Periksa apakah pengguna menjalankan pencarian yang melewati jeda iklan yang belum ditonton, dan jika ya, arahkan mereka kembali ke jeda iklan.
- Setelah jeda iklan selesai, kembalikan iklan ke pencarian aslinya.
Dalam bentuk diagram, hal itu terlihat seperti ini:
Berikut cara menerapkan snapback menggunakan IMA DAI SDK, seperti yang ditunjukkan dalam AdvancedExample.
Mencegah pencarian membiarkan jeda iklan tidak ditonton
Periksa apakah pengguna telah menjalankan pencarian
yang melewati jeda iklan yang belum ditonton,
dan jika ya, arahkan mereka kembali ke jeda iklan.
Contoh lanjutan tvOS memanfaatkan AVPlayerViewController
,
yang memiliki metode delegasi untuk memberi tahu Anda
bahwa pengguna telah menjalankan pencarian.
Jika waktu mulai pencarian terjadi sebelum jeda iklan sebelumnya (artinya
pengguna telah melewatinya) dan jeda itu belum diputar,
mencarinya kembali ke awal jeda iklan. Selain itu, catat waktu mulai
awalnya meminta pencarian untuk diperiksa nanti di pengendali ad-break-did-end
Anda:
- (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]; } } }
Mengembalikan pengguna ke pencarian awal
Dalam delegasi peristiwa, ubah kasus AD_BREAK_ENDED
untuk memeriksa apakah
jeda iklan sebelumnya diputar sebagai akibat dari snapback.
- (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; } }