Snapback

Als Video-Publisher möchten Sie vielleicht verhindern, dass Nutzer Ihre Mid-Roll-Anzeigen überspringen. Wenn ein Nutzer nach einer Werbeunterbrechung springt, kannst du ihn an den Beginn der Werbeunterbrechung und nach Abschluss der Werbeunterbrechung zurückholen. Diese Funktion wird als „Snapback“ bezeichnet.

Ein Beispiel sehen Sie im Diagramm unten. Der Zuschauer sieht sich ein Video an und stuft zwischen 5 Minuten und 15 Minuten. Nach 10 Minuten gibt es jedoch eine Werbeunterbrechung, die Nutzer sehen sollen, bevor sie sich den Inhalt danach ansehen können:

So kannst du die Werbeunterbrechung schalten:

  1. Prüfe, ob der Nutzer eine Suche ausgeführt hat, die eine nicht gesehene Werbeunterbrechung überspringt hat. Wenn ja, kehre zur Werbeunterbrechung zurück.
  2. Wenn die Werbeunterbrechung abgeschlossen ist, kehre zur ursprünglichen Suche zurück.

In Diagrammform sieht das so aus:

Im folgenden Beispiel wird beschrieben, wie dieser Workflow im IMA DAI SDK wie im AdvancedExample implementiert wird.

Verhindern, dass eine Suche eine Werbeunterbrechung unbeobachtet verlässt

Prüfe, ob der Nutzer eine Suche ausgeführt hat, die über eine nicht angesehene Werbeunterbrechung hinausgeht. Wenn ja, kehre zur Werbeunterbrechung zurück. Verwenden Sie für das iOS Advanced-Beispiel die Interaktion des Nutzers mit Ihrer UI, um zu erkennen, ob er eine Suche ausgeführt hat. Behalten Sie die Suchstartzeit bei, um zu prüfen, ob bei der Suche eine noch nicht wiedergegebene Werbeunterbrechung passiert ist. Wenn der Nutzer die Videosteuerelemente loslässt, vergleiche die aktuelle Zeit mit dem Zeitpunkt der letzten Werbeunterbrechung. Wenn die Werbeunterbrechung nach der Suchstartzeit liegt, d. h. der Nutzer übersprungen ist, und die Werbeunterbrechung noch nicht abgespielt wurde, springe zurück zum Anfang der Werbeunterbrechung. Außerdem kannst du ein Snapback-Flag festlegen, das später in deinem Handler für abgeschlossene Werbeunterbrechung geprüft werden soll:

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

Den Nutzer zu seiner ursprünglichen Suche zurückversetzen

Prüfe im Handler für beendete Werbeunterbrechungen, ob die vorherige Unterbrechung als Ergebnis des Snapbacks wiedergegeben wurde. Wenn ja, kehre den Nutzer an die Stelle zurück, an die er ursprünglich gesucht hatte, sofern er sich nicht in der Mitte der gerade abgespielten Werbeunterbrechung befand:

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