Resguardo

Como publicador de videos, recomendamos que evites que los usuarios busquen más allá de tus anuncios durante el video. Cuando un usuario busca más allá de una pausa publicitaria, puedes llevarlo de regreso al inicio de esa pausa y, luego, regresarlo a su ubicación de búsqueda una vez que se haya completado esa pausa. Esta función se denomina “restablecimiento automático”.

A modo de ejemplo, consulta el siguiente diagrama. Cuando el usuario mira un video, decide saltar de la marca de 5 a 15 minutos. Sin embargo, hay una pausa publicitaria a los 10 minutos que deseas que miren antes de que puedan mirar el contenido después:

Para mostrar esta pausa publicitaria, sigue estos pasos:

  1. Verifica si el usuario ejecutó una búsqueda que pasó más allá de una pausa publicitaria no vista y, de ser así, llévalo a la pausa publicitaria.
  2. Una vez que se complete la pausa publicitaria, regresa a su búsqueda original.

En forma de diagrama, se ve así:

A continuación, se muestra cómo implementar este flujo de trabajo en el SDK de IMA para tvOS, como se hace en AdvancedExample.

Cómo evitar que una búsqueda salga de una pausa publicitaria sin mirar

Verifica si el usuario ejecutó una búsqueda que pasó después de una pausa publicitaria no vista y, de ser así, llévalo de vuelta a la pausa publicitaria. En el ejemplo avanzado de tvOS, se aprovecha AVPlayerViewController, que tiene un método delegado para indicarte que el usuario ejecutó una búsqueda. Si la hora de inicio de la búsqueda es anterior a la pausa publicitaria anterior (es decir, que el usuario la pasó) y esa pausa aún no se reprodujo, regresa al inicio de la pausa publicitaria. Además, registra la hora de inicio de la búsqueda solicitada inicialmente para verificar más tarde en el controlador ad-break-did-end:

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

Hacer que el usuario vuelva a su búsqueda original

En el delegado de tu evento, modifica el caso AD_BREAK_ENDED para verificar si se reprodujo la pausa publicitaria anterior como resultado del restablecimiento automático.


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