Upgrade di DAI da v3 a v4

L'SDK IMA DAI e l'SDK IMA lato client sono stati uniti nella versione 4, ed è stato rielaborato come sottoinsieme esatto dell'SDK per iOS. Significativamente riduce la curva di apprendimento per gli sviluppatori iOS. Di conseguenza, una parte del codice richiesta per gli utenti DAI è cambiata per essere più coerente con gli altri nostri SDK.

Questa guida illustra la procedura necessaria per eseguire l'upgrade di una versione 3 esistente al nuovo SDK v4.

In caso di dubbi, consulta il Campioni DAI per iOS: L'API tvOS v4 è la stessa (tranne per companion e PIP, che non sono disponibili su tvOS).

Cambiare il nome del modulo

Per corrispondere all'SDK per iOS, abbiamo cambiato il nome del modulo da InteractiveMediaAds a GoogleInteractiveMediaAds.

Modifiche
Vecchio

#import <InteractiveMediaAds/InteractiveMediaAds.h>
Nuovo

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
Vecchio

@import InteractiveMediaAds;
Nuovo

@import GoogleInteractiveMediaAds;

Crea il nuovo contenitore di annunci

Il IMAAdDisplayContainer è responsabile della gestione della vista del contenitore di annunci e le aree annuncio companion utilizzate per la riproduzione.

Modifiche
Vecchio Non esiste una versione precedente equivalente.
Nuovo

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

Passare IMAVideoDisplay e IMAAdDisplayContainer all'IMAStreamRequest

Ora che hai un display video e IMAAdDisplayContainer, devi superare alla richiesta di streaming in modo che l'SDK IMA DAI possa gestirli.

Modifiche
Vecchio

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

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

Richiesta con un IMAAdsLoader

Modifiche
Vecchio

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

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

Implementa IMAAdsLoaderDelegate per l'inizializzazione dello stream

Queste funzioni sono state rinominate e modificate per coerenza con iOS l'SDK. È cambiata anche la relazione tra il gestore dello stream e lo stream. Nella SDK v3, un unico gestore di stream potrebbe essere utilizzato per gestire più stream. Nella versione 4, Ogni gestore di stream può gestire un solo stream.

Modifiche
Vecchio

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

- (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 IMAStreamManagerDelega

Per garantire la coerenza con gli SDK per iOS, l'SDK tvOS ora fornisce un unico stream delegato dell'amministratore, IMAStreamManagerDelegate, per la gestione degli eventi di flusso. Tu ora devi utilizzare un'istruzione di switch all'interno del delegato per gestire eventi.

Modifiche
Vecchio

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

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