從 DAI v3 升級至第 4 版

適用於 tvOS DAI 和 tvOS 用戶端的 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 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];

導入 IMAAdsLoaderApproval 以進行串流初始化

為與 iOS SDK 一致,這些函式已重新命名並修改。而直播管理員與直播之間的關係也已變更。在 v3 SDK 中,單一串流管理員可用來管理多個串流。在 v4 中,每個串流管理員只能管理單一串流。

異動
舊優惠

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

導入 IMAStreamManager 委派

為了與 iOS SDK 保持一致,tvOS SDK 現在提供單一串流管理員委派 IMAStreamManagerDelegate 來處理串流事件。您現在需要使用該委派項目內的切換陳述式,管理特定事件。

異動
舊優惠

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