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