Passage de la version 3 à la version 4 de l'insertion dynamique d'annonce

Les SDK IMA pour l'insertion dynamique d'annonce tvOS et le côté client tvOS ont été fusionnés dans la version 4 et retravaillés en tant que sous-ensemble exact du SDK iOS. Cela réduit considérablement la phase d'apprentissage pour les développeurs iOS. Par conséquent, une partie du code requis pour les utilisateurs de l'insertion dynamique d'annonce a été modifiée afin d'être plus cohérent avec nos autres SDK.

Ce guide décrit le processus requis pour mettre à niveau une implémentation de la version 3 existante vers le nouveau SDK v4.

En cas de doute, consultez les exemples d'insertion dynamique d'annonce pour 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 par GoogleInteractiveMediaAds.

Changements
Ancienne version

#import <InteractiveMediaAds/InteractiveMediaAds.h>

Nouvelle version

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>

Ancienne version

@import InteractiveMediaAds;

Nouvelle version

@import GoogleInteractiveMediaAds;

Créer le conteneur d'annonces

IMAAdDisplayContainer permet de gérer la vue du conteneur d'annonces et les espaces publicitaires associés utilisés pour la lecture des annonces.

Changements
Ancienne version Il n'existe aucun équivalent précédent.
Nouvelle version

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

Transmettez IMAVideoDisplay et IMAAdDisplayContainer à IMAStreamRequest.

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

Changements
Ancienne version

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

Nouvelle version

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

Changements
Ancienne version

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

Nouvelle version

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

Implémenter IMAAdsLoaderLoader pour l'initialisation du flux

Ces fonctions ont été renommées et modifiées par souci de cohérence avec le SDK iOS. La relation entre le gestionnaire de diffusion et la diffusion a également changé. Dans le SDK v3, un seul gestionnaire de flux peut être utilisé pour gérer plusieurs flux. Dans la version 4, chaque gestionnaire de flux ne peut gérer qu'une seule diffusion.

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

Nouvelle version

- (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émentation de IMAStreamManagerdeploy

Par souci de cohérence avec les SDK iOS, le SDK tvOS fournit désormais un seul délégué de gestionnaire de flux, IMAStreamManagerDelegate, pour gérer les événements de flux. Vous devez maintenant utiliser une instruction switch dans ce délégué pour gérer des événements spécifiques.

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

Nouvelle version

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