Upgrade da DAI v3 para v4

Os SDKs do IMA para a DAI do tvOS e o tvOS no lado do cliente foram mesclados na versão 4 e reformulados como um subconjunto exato do SDK do iOS. Isso reduz significativamente a curva de aprendizado para desenvolvedores iOS. Como resultado, parte do código necessário para usuários da DAI foi alterado para ser mais consistente com nossos outros SDKs.

Este guia explica o processo necessário para fazer upgrade de uma implementação existente da v3 para o novo SDK v4.

Em caso de dúvida, consulte os exemplos de DAI do iOS. A API tvOS v4 é a mesma (exceto para complementares e PIP, que não estão disponíveis no tvOS).

Mudar o nome do módulo

Para corresponder ao SDK do iOS, mudamos o nome do módulo de InteractiveMediaAds para GoogleInteractiveMediaAds.

Mudou
Antiga

#import <InteractiveMediaAds/InteractiveMediaAds.h>

Novo

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>

Antiga

@import InteractiveMediaAds;

Novo

@import GoogleInteractiveMediaAds;

Criar o novo contêiner de anúncios

O IMAAdDisplayContainer é responsável por gerenciar a visualização do contêiner de anúncios e os espaços dos anúncios complementares usados para a reprodução do anúncio.

Mudou
Antiga Não há equivalente anterior.
Novo

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

Transmita o IMAVideoDisplay e o IMAAdDisplayContainer para o IMAStreamRequest

Agora que você tem uma exibição de vídeo e IMAAdDisplayContainer,, é necessário transmiti-los à solicitação de stream para que o SDK do IMA possa gerenciá-los.

Mudou
Antiga

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

Novo

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

Solicitar com um IMAAdsLoader

Mudou
Antiga

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

Novo

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

Implementar IMAAdsLoaderDelegate para inicialização do stream

Essas funções foram renomeadas e modificadas para serem consistentes com o SDK do iOS. A relação entre o gerenciador e a transmissão também mudou. No SDK v3, um único gerenciador de streams pode ser usado para gerenciar vários streams. Na v4, cada gerenciador de stream só pode gerenciar um único stream.

Mudou
Antiga

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

Novo

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

Implementar IMAStreamManagerDelegate

Para manter a consistência com os SDKs do iOS, o SDK do tvOS agora oferece um único delegado do gerenciador de streams, IMAStreamManagerDelegate, para processar eventos de stream. Agora você precisa usar uma instrução switch dentro desse delegado para gerenciar eventos específicos.

Mudou
Antiga

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

Novo

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