Snapback

Als Video-Publisher möchten Sie vielleicht Ihre Zuschauer daran hindern, die über Mid-Roll-Anzeigen hinausgehen. Wenn ein Nutzer nach einer Werbeunterbrechung überspringt, können Sie sie an den Beginn der Werbeunterbrechung nach Abschluss der Werbeunterbrechung zur Suchposition. Dieses wird als „Snapback“ bezeichnet.

Im Diagramm unten sehen Sie ein Beispiel. Der Zuschauer sieht sich ein Video an. und beschließt, von der 5-Minuten- auf die 15-Minuten-Marke zu springen. Nach 10 Minuten wird jedoch eine Werbeunterbrechung eingefügt, bevor sie sich die Inhalte danach ansehen können:

So kannst du diese Werbeunterbrechung anzeigen lassen:

  1. Prüfen, ob der Nutzer eine Suche ausgeführt hat, die über eine nicht angesehene Werbeunterbrechung hinausgesprungen ist, Falls ja, leite sie zurück zur Werbeunterbrechung.
  2. Nach Abschluss der Werbeunterbrechung wird die ursprüngliche Suche wieder aktiviert.

In Diagrammform sieht das so aus:

Im Folgenden wird beschrieben, wie Sie eine Snapback mithilfe des IMA DAI SDK implementieren, wie in AdvancedExample verwenden.

Bei einem Suchvorgang wird eine Werbeunterbrechung nicht angesehen

Prüfen Sie, ob der Nutzer eine Suche ausgeführt hat, die über eine nicht angesehene Werbeunterbrechung hinausgegangen ist. Falls ja, leite sie zurück zur Werbeunterbrechung. Im erweiterten tvOS-Beispiel wird AVPlayerViewController genutzt, die über eine delegate-Methode verfügt, die Ihnen mitteilt, dass der Nutzer eine Suche ausgeführt hat. Liegt der Beginn der Suche vor der vorherigen Werbeunterbrechung der Nutzer darüber hinausgesprungen ist) und die Pause noch nicht gespielt wurde, zurück zum Beginn der Werbeunterbrechung spulen. Notieren Sie sich auch die Startzeit des ursprünglich angefordert, um später in Ihrem ad-break-did-end-Handler nachzusehen:

- (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 zu seiner ursprünglichen Suche zurückversetzen

Ändern Sie im Ereignisdelegierten den AD_BREAK_ENDED-Fall, um zu prüfen, ob die Die vorherige Werbeunterbrechung wurde aufgrund eines Snapbacks wiedergegeben.


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