從 DAI v3 升級至第 4 版

IMA DAI SDK 和 IMA 用戶端 SDK 已經合併到第 4 版。 且已完全重塑為 iOS SDK 的子集。這對使用者來說 減少 iOS 開發人員的學習曲線。因此,其中一些程式碼 動態廣告插播 (DAI) 使用者專用的必要變更,以便與其他 SDK 更加一致。

本指南將逐步說明昇級現有 v3 所需的程序 導入新的 v4 SDK

如有任何疑問,請參閱 iOS DAI 範例 tvOS v4 API 相同 (不包含隨播廣告和 PIP,因為 tvOS)。

變更模組名稱

為配合 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 裝置的 將機器學習工作流程自動化直播管理員與直播之間的關係也已變更。在 第 3 版 SDK,一個串流管理工具可用於管理多個串流。在第 4 版中 每個串流管理員只能管理一個直播。

異動

- (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),用於處理串流事件。個人中心 現在,必須在委派代表中使用切換陳述式,管理 事件。

異動

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