Actualización de DAI v3 a v4

El SDK de IMA de DAI y el SDK del cliente de IMA se combinaron en la versión 4. y se modificaron como un subconjunto exacto del SDK de iOS. Esto reduce la curva de aprendizaje para los desarrolladores de iOS. Como resultado, parte del código requeridas para los usuarios de la DAI cambiaron para ser más coherentes con nuestros otros SDKs.

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

Si tienes alguna duda, consulta el Muestras de DAI de iOS: La API de tvOS v4 es la misma (excepto para los complementos y PIP, que no están disponibles en tvOS).

Cómo 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 contenedor de anuncios nuevo

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 un equivalente anterior.
Nuevo

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

Pasa los elementos IMAVideoDisplay y IMAAdDisplayContainer a IMAStreamRequest

Ahora que tienes una pantalla de video y IMAAdDisplayContainer,, debes pasar a la solicitud de transmisión para que el SDK de IMA de DAI 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];

Cómo realizar una solicitud con un elemento 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];

Implementa IMAAdsLoaderDelegate para la inicialización de transmisión

Se cambió el nombre de estas funciones y se modificaron para que sean coherentes con la versión de iOS de Google Cloud. También cambió la relación entre el administrador de transmisiones y la transmisión. En la v3, se podría usar un solo administrador de transmisiones para administrar varias transmisiones. En la versión 4, cada administrador de transmisiones solo puede administrar una única 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 una sola transmisión. y delegado de administrador, IMAStreamManagerDelegate, para controlar los eventos de transmisión. Tú debes usar una sentencia switch dentro de ese delegado para administrar eventos.

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