DAI v3 から v4 へのアップグレード

IMA DAI SDK と IMA クライアント側 SDK はバージョン 4 に統合され、iOS SDK のサブセットとして再構築されました。これにより、iOS デベロッパーの学習曲線が大幅に短縮されます。その結果、DAI ユーザーに必要なコードの一部が変更され、他の SDK との一貫性が向上しました。

このガイドでは、既存の v3 実装を新しい v4 SDK にアップグレードするために必要なプロセスについて説明します。

判断に迷う場合は、iOS DAI サンプルをご覧ください。tvOS v4 API は同じです(tvOS で使用できないコンパニオンと PIP を除く)。

モジュール名を変更する

iOS SDK に合わせて、モジュール名を InteractiveMediaAds から GoogleInteractiveMediaAds に変更しました。

変更回数
古い

#import <InteractiveMediaAds/InteractiveMediaAds.h>

新規

#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>

古い

@import InteractiveMediaAds;

新規

@import GoogleInteractiveMediaAds;

新しい広告コンテナを作成する

IMAAdDisplayContainer は、広告の再生に使用される広告コンテナのビューとコンパニオン広告スロットを管理します。

変更回数
古い これに相当するものはありません。
新規

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

IMAVideoDisplay と IMAAdDisplayContainer を IMAStreamRequest に渡す

動画ディスプレイと IMAAdDisplayContainer, を作成したので、これらをストリーム リクエストに渡して、IMA DAI SDK で管理できるようにする必要があります。

変更回数
古い

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

新規

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

IMAAdsLoader を使用してリクエストする

変更回数
古い

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

新規

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

ストリームを初期化するために IMAAdsLoaderDelegate を実装する

これらの機能は、iOS SDK に合わせて名前が変更され、変更されています。ストリーム管理者とストリームの関係も変わりました。v3 SDK では、単一のストリーム マネージャーで複数のストリームを管理できます。v4 では、各ストリーム マネージャーが管理できるストリームは 1 つのみです。

変更回数
古い

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

新規

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

IMAStreamManagerDelegate を実装する

iOS SDK との一貫性を保つため、tvOS SDK ではストリーム イベントを処理するための単一のストリーム マネージャー デリゲート IMAStreamManagerDelegate が提供されるようになりました。次に、そのデリゲート内で switch 文を使用して、特定のイベントを管理する必要があります。

変更回数
古い

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

新規

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