IMA DAI SDK 和 IMA 客户端 SDK 已在版本 4 中合并,并且已重新制作为 iOS SDK 的一个确切子集。这可显著缩短 iOS 开发者的学习曲线。因此,我们更改了 DAI 用户所需的一些代码,使其与我们的其他 SDK 更加一致。
本指南介绍了将现有 v3 实现升级到新的 v4 SDK 所需的流程。
如有疑问,请参阅 iOS DAI 示例 - tvOS v4 API 是相同的(但随播广告和画中画除外,它们在 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 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]; } |
实现 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; } } |