Actualización de DAI v3 a v4

Los SDK de IMA para la DAI de tvOS y el lado del cliente de tvOS se combinaron en la versión 4 y se rediseñaron como un subconjunto exacto del SDK de iOS. Esto reduce de forma significativa la curva de aprendizaje para los desarrolladores de iOS. Como resultado, se modificó parte del código requerido para los usuarios de la DAI a fin de ser más coherente con nuestros otros SDK.

En esta guía, se explica el proceso necesario para actualizar una implementación existente de la versión 3 al nuevo SDK de la versión 4.

Si tienes dudas, consulta las muestras de DAI para iOS, que la API de tvOS v4 es la misma (excepto para los complementarios y PIP, que no están disponibles en tvOS).

Cambiar el nombre del módulo

Para que coincida con el SDK de iOS, cambiamos el nombre del módulo de InteractiveMediaAds a GoogleInteractiveMediaAds.

Cambios
Antiguo

#import <InteractiveMediaAds/InteractiveMediaAds.h>

Nuevo

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>

Antiguo

@import InteractiveMediaAds;

Nuevo

@import GoogleInteractiveMediaAds;

Crea el nuevo contenedor de anuncios

IMAAdDisplayContainer se encarga de administrar la vista del contenedor de anuncios y los espacios publicitarios complementarios que se usan para la reproducción de anuncios.

Cambios
Antiguo No hay equivalente anterior.
Nuevo

self.adDisplayContainer =
    [[IMAAdDisplayContainer alloc] initWithAdContainer:self.videoView];

Cómo pasar los elementos IMAVideoDisplay y IMAAdDisplayContainer a IMAStreamRequest

Ahora que tienes una pantalla de video y IMAAdDisplayContainer,, debes pasarlos a la solicitud de transmisión para que el SDK de IMA pueda administrarlos.

Cambios
Antiguo

IMALiveStreamRequest *streamRequest =
    [[IMALiveStreamRequest alloc] initWithAssetKey:kAssetKey];
IMAVODStreamRequest *streamRequest =
    [[IMAVODStreamRequest alloc] initWithContentSourceID:kContentSourceID
                                                 videoID:kVideoID];

Nuevo

IMALiveStreamRequest *streamRequest =
    [[IMALiveStreamRequest alloc] initWithAssetKey:kAssetKey
                                adDisplayContainer:self.adDisplayContainer
                                      videoDisplay:self.videoDisplay];
IMAVODStreamRequest *streamRequest =
      [[IMAVODStreamRequest alloc] initWithContentSourceId:kContentSourceID
                                                   videoId:kVideoID
                                        adDisplayContainer:self.adDisplayContainer
                                              videoDisplay:self.videoDisplay];

Solicitud con un IMAAdsLoader

Cambios
Antiguo

self.streamManager =
    [[IMAStreamManager alloc] initWithVideoDisplay:self.videoDisplay];
self.streamManager.delegate = self;
[self.streamManager requestStream:streamRequest];

Nuevo

self.adsLoader = [[IMAAdsLoader alloc] init];
self.adsLoader.delegate = self;
[self.adsLoader requestStreamWithRequest:streamRequest];

Cómo implementar IMAAdsLoaderDelegate para la inicialización de transmisiones

Se modificó el nombre de estas funciones y se modificaron para que sean coherentes con el SDK de iOS. También cambió la relación entre el administrador y la transmisión. En la versión 3 del SDK, se podía usar un solo administrador de transmisiones para administrar varias transmisiones. En la versión 4, cada administrador de transmisión puede administrar una sola transmisión.

Cambios
Antiguo

- (void)streamManager:(IMAStreamManager *)streamManager
    didInitializeStream:(NSString *)streamID {
  NSLog(@"Stream initialized with streamID: %@", streamID);
}

- (void)streamManager:(IMAStreamManager *)streamManager
      didReceiveError:(NSError *)error {
  NSLog(@"Error: %@", error);
  [self playBackupStream];
}

Nuevo

- (void)adsLoader:(IMAAdsLoader *)loader
    adsLoadedWithData:(IMAAdsLoadedData *)adsLoadedData {
  self.streamManager = adsLoadedData.streamManager;
  self.streamManager.delegate = self;
  [self.streamManager initializeWithAdsRenderingSettings:nil];
  NSLog(@"Stream initialized with streamID: %@", self.streamManager.streamId);
}

- (void)adsLoader:(IMAAdsLoader *)loader
    failedWithErrorData:(IMAAdLoadingErrorData *)adErrorData {
  NSLog(@"Error: %@", adErrorData.adError);
  [self playBackupStream];
}

Implementa IMAStreamManagerDelegate

Para mantener la coherencia con los SDK de iOS, el SDK de tvOS ahora proporciona un solo delegado de administrador de transmisión, IMAStreamManagerDelegate, para controlar los eventos de transmisión. Ahora, debes usar una sentencia switch dentro de ese delegado para administrar eventos específicos.

Cambios
Antiguo

- (void)streamManager:(IMAStreamManager *)streamManager
      adBreakDidStart:(IMAAdBreakInfo *)adBreakInfo {
  NSLog(@"Ad break started");
  self.playerViewController.requiresLinearPlayback = YES;
}

- (void)streamManager:(IMAStreamManager *)streamManager
        adBreakDidEnd:(IMAAdBreakInfo *)adBreakInfo {
  NSLog(@"Ad break ended");
  self.playerViewController.requiresLinearPlayback = NO;
}

Nuevo

- (void)streamManager:(IMAStreamManager *)streamManager
    didReceiveAdEvent:(IMAAdEvent *)event {
  NSLog(@"StreamManager event (%@).", event.typeString);
  switch (event.type) {
    case kIMAAdEvent_AD_BREAK_STARTED: {
      NSLog(@"Ad break started");
      self.playerViewController.requiresLinearPlayback = YES;
      break;
    }
    case kIMAAdEvent_AD_BREAK_ENDED: {
      NSLog(@"Ad break ended");
      self.playerViewController.requiresLinearPlayback = NO;
      break;
    }
    // And so on for other events.
    default:
      break;
  }
}