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