適用於 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; } } |