Zu einer übersprungenen Werbeunterbrechung zurückkehren

Plattform auswählen:HTML5 Android iOS tvOS Roku>

Als Videoverleger möchtest du möglicherweise verhindern, dass Zuschauer deine Mid-Roll-Anzeigen überspringen. Wenn ein Nutzer eine Werbeunterbrechung überspringt, kannst du ihn an den Beginn dieser Werbeunterbrechung zurückbringen und ihn dann nach Abschluss der Werbeunterbrechung zu seiner Suchposition zurückleiten. Diese Funktion wird als „Snapback“ bezeichnet.

Ein Beispiel sehen Sie im Diagramm unten. Ein Zuschauer sieht sich ein Video an und beschließt, von der 5‑Minute zur 15‑Minute zu springen. Bei der 10-Minuten-Marke gibt es jedoch eine Werbeunterbrechung, die sich die Zuschauer ansehen müssen, bevor sie sich den Content danach ansehen können:

So zeigen Sie diese Werbeunterbrechung an:

  1. Prüfe, ob der Nutzer eine Suche durchgeführt hat, bei der eine nicht angesehene Werbeunterbrechung übersprungen wurde. Wenn ja, führe ihn zur Werbeunterbrechung zurück.
  2. Nach der Werbeunterbrechung kehren sie zur ursprünglichen Suchposition zurück.

In Diagrammform sieht das so aus:

So implementieren Sie die Snapback-Funktion mit dem IMA DAI SDK, wie im AdvancedExample gezeigt.

Verhindern, dass eine Werbeunterbrechung durch das Vorspulen nicht angesehen wird

Prüfe, ob der Nutzer eine Suche durchgeführt hat, die über eine nicht angesehene Werbeunterbrechung hinausging. Wenn ja, leite ihn zur Werbeunterbrechung zurück. Im erweiterten tvOS-Beispiel wird AVPlayerViewController verwendet, das eine Delegatenmethode enthält, mit der Sie darüber informiert werden, dass der Nutzer eine Suche ausgeführt hat. Wenn die Startzeit der Suche vor der vorherigen Werbeunterbrechung liegt (der Nutzer hat sie also übersprungen) und diese Unterbrechung noch nicht wiedergegeben wurde, wird der Nutzer zum Beginn der Werbeunterbrechung zurückgeleitet. Erfasse außerdem die Startzeit der ursprünglich angeforderten Suche, um sie später in deinem ad-break-did-end-Handler zu prüfen:

- (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];
    }
  }
}

Den Nutzer zur ursprünglichen Position zurückbringen

Ändern Sie in Ihrem Ereignis-Delegate den AD_BREAK_ENDED-Fall, um zu prüfen, ob der vorherige Werbeunterbrechung aufgrund von Snapback abgespielt wurde.


- (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;
  }
}