Upgrade da DAI v3 para v4

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

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

Em caso de dúvida, consulte o Amostras de DAI para iOS A API tvOS v4 é a mesma (exceto para complementares e PIP, que não estão tvOS).

Mudar o nome do módulo

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

Mudanças
Antigo

#import <InteractiveMediaAds/InteractiveMediaAds.h>
Novo

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
Antigo

@import InteractiveMediaAds;
Novo

@import GoogleInteractiveMediaAds;

Crie o novo contêiner do anúncio

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

Mudanças
Antigo Não há equivalente anterior.
Novo

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

Transmitir o IMAVideoDisplay e o IMAAdDisplayContainer para o IMAStreamRequest

Agora que você tem uma tela de vídeo e IMAAdDisplayContainer,, é preciso transmitir à solicitação de stream para que o SDK de DAI do IMA possa gerenciá-los.

Mudanças
Antigo

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

Solicitação com um IMAAdsLoader

Mudanças
Antigo

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 fluxo

Essas funções foram renomeadas e modificadas para ficarem consistentes com o SDK do Vertex AI Pipelines. A relação entre o gerenciador e a transmissão também mudou. Na v3, um único gerenciador de streams pode ser usado para gerenciar vários streams. Na v4, Cada gerenciador de transmissões pode administrar somente uma transmissão.

Mudanças
Antigo

- (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 fornece um único stream delegado de gerenciador, IMAStreamManagerDelegate, para processar eventos de stream. Você agora precisa usar uma instrução switch dentro desse delegado para gerenciar eventos.

Mudanças
Antigo

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