适用于 tvOS DAI 和 tvOS 客户端的 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 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; } } |