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

Le SDK IMA pour l'insertion dynamique d'annonce et le SDK IMA côté client 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 (à l'exception des compagnons et de 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

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>

Ancienne version

@import InteractiveMediaAds;

Nouvelle

@import GoogleInteractiveMediaAds;

Créer le conteneur d'annonces

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

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

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 DAI puisse les gérer.

Changements
Ancienne version

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

Nouvelle

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

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

Implémenter IMAAdsLoaderMetadata pour l'initialisation du flux

Ces fonctions ont été renommées et modifiées pour être cohérentes 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

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

Par souci de cohérence avec les SDK iOS, le SDK tvOS fournit désormais un délégué de gestionnaire de flux unique, IMAStreamManagerDelegate, pour gérer les événements de flux. Vous devez maintenant utiliser une instruction switch au sein de 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

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