Passer de la version 3 à la version 4

Le SDK IMA DAI et le SDK IMA côté client ont été fusionnés dans la version 4, et ont été retravaillés comme un sous-ensemble exact du SDK iOS. Cela considérablement ce qui réduit la phase d'apprentissage pour les développeurs iOS. Par conséquent, une partie du code requises pour les utilisateurs de l'insertion dynamique d'annonce sont désormais plus cohérentes avec nos autres SDK.

Ce guide décrit le processus requis pour mettre à niveau une version 3 existante. vers la nouvelle version 4 du SDK.

En cas de doute, consultez le Exemples d'insertion dynamique d'annonces iOS : L'API tvOS v4 est la même (sauf pour les compagnons et PIP, qui ne sont pas disponibles sur tvOS).

Modifier le nom du module

Pour correspondre au SDK iOS, nous avons remplacé le nom du module InteractiveMediaAds à GoogleInteractiveMediaAds.

Modifications
Ancienne version

#import <InteractiveMediaAds/InteractiveMediaAds.h>
Nouveau

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
Ancienne version

@import InteractiveMediaAds;
Nouveau

@import GoogleInteractiveMediaAds;

Créer un conteneur d'annonces

Le IMAAdDisplayContainer est responsable de la gestion de la vue du conteneur d'annonces et les espaces publicitaires associés utilisés pour la lecture des annonces.

Modifications
Ancienne version Il n'existe aucun équivalent précédent.
Nouveau

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

Transmettre les éléments "IMAVideoDisplay" et "IMAAdDisplayContainer" à "IMAStreamRequest"

Maintenant que vous disposez d'un affichage vidéo et IMAAdDisplayContainer,, vous devez transmettre à la demande de flux pour que le SDK IMA DAI puisse les gérer.

Modifications
Ancienne version

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

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

Demande avec un IMAAdsLoader

Modifications
Ancienne version

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

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

Implémenter IMAAdsLoaderDelegate pour l'initialisation du flux

Ces fonctions ont été renommées et modifiées pour être cohérentes avec SDK. La relation entre le gestionnaire de flux et le flux a également changé. Dans v3, un seul gestionnaire de flux permet de gérer plusieurs flux. Dans la v4, chaque gestionnaire de flux ne peut gérer qu'un seul flux.

Modifications
Ancienne version

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

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

Implémenter IMAStreamManagerDelegate

Pour assurer la cohérence avec les SDK iOS, le SDK tvOS fournit désormais un flux unique le délégué de gestion IMAStreamManagerDelegate, qui permet de gérer les événements de flux. Toi vous devez maintenant utiliser une instruction "switch" au sein de ce délégué pour gérer des événements.

Modifications
Ancienne version

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

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