从 DAI v3 升级到 v4

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