Snapback

Sebagai penayang video, Anda mungkin ingin mencegah penonton agar tidak mencari iklan mid-roll Anda. Saat pengguna mencari melewati jeda iklan, Anda dapat mengarahkan mereka kembali ke awal jeda iklan tersebut, lalu mengembalikannya ke lokasi pencarian setelah jeda iklan selesai. Fitur ini disebut "snapback".

Sebagai contoh, lihat diagram di bawah. Penonton Anda sedang menonton video, dan memutuskan untuk mencari dari tanda 5 menit hingga 15 menit. Namun, ada jeda iklan pada tanda 10 menit yang Anda inginkan untuk ditonton sebelum mereka dapat menonton konten setelahnya:

Untuk menampilkan jeda iklan ini, lakukan langkah-langkah berikut:

  1. Periksa apakah pengguna menjalankan pencarian yang melewati jeda iklan yang belum ditonton, dan jika ya, kembalikan ke jeda iklan tersebut.
  2. Setelah jeda iklan selesai, kembalikan ke pencarian awal.

Dalam bentuk diagram, formatnya terlihat seperti ini:

Berikut cara menerapkan alur kerja ini di IMA DAI SDK, seperti yang dilakukan di AdvancedExample.

Mencegah upaya membuat 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. Untuk contoh iOS Advanced, gunakan interaksi pengguna dengan UI Anda untuk mendeteksi kapan pengguna tersebut menjalankan pencarian. Pertahankan waktu mulai pencarian untuk memeriksa apakah jeda iklan yang belum diputar dalam pencarian telah diteruskan. Saat pengguna merilis kontrol video, bandingkan waktu saat ini dengan waktu jeda iklan terbaru. Jika jeda iklan terjadi setelah waktu mulai pencarian (artinya pengguna telah melewatinya) dan belum diputar, cari kembali ke awal jeda iklan. Selain itu, tetapkan tanda snapback untuk diperiksa nanti di pengendali penyelesaian jeda iklan Anda:

- (IBAction)videoControlsTouchStarted:(id)sender {
  self.seekStartTime = self.contentPlayer.currentTime;
}

- (IBAction)videoControlsTouchEnded:(id)sender {
  self.seekEndTime = CMTimeMake(self.progressBar.value, 1);
  IMACuepoint *lastCuepoint =
      [self.streamManager previousCuepointForStreamTime:CMTimeGetSeconds(self.seekEndTime)];
  if (!lastCuepoint.played && (lastCuepoint.startTime > CMTimeGetSeconds(self.seekStartTime))) {
    self.snapbackMode = YES
    // Add 1 to the seek time to get the keyframe at the start of the ad to be your landing place.
    [self.contentPlayer seekToTime:CMTimeMakeWithSeconds(lastCuepoint.startTime + 1, NSEC_PER_SEC)];
  }
}

Mengembalikan pengguna ke pencarian awal

Di pengendali jeda iklan, periksa apakah jeda sebelumnya diputar sebagai hasil dari snapback. Jika ya, kembalikan pengguna ke tempat yang mereka coba cari di awal (selama tempat tersebut bukan di tengah jeda iklan yang baru saja diputar):

- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
  switch (event.type) {
    case kIMAAdEvent_AD_BREAK_ENDED: {
      if (self.snapbackMode) {
        self.snapbackMode = NO;
        if (CMTimeCompare(self.seekEndTime, self.contentPlayer.currentTime)) {
          [self.contentPlayer seekToTime:self.seekEndTime];
        }
      }
      break;
    }
  }
}