跳转到主要内容
这是 10 分钟集成。开始前请完成安装,确保 KontextVideo.shared.initialize(with:) 在启动时运行。 每种格式都遵循同样的四个步骤:
  1. VideoAds(content:),对应观众正在看的视频。
  2. ads.format() 向服务器请求并返回一个 VideoAd。
  3. ad.load() 在屏幕外渲染素材,之后展示即时完成。或者 ad.reject(),如果你不会使用它。
  4. 在你选的时刻 ad.show()。结束时一个 didEnd 回调。

1. 创建视频的广告对象

每个视频(剧集)一个 VideoAds。创建它不发送任何请求。
只有 id 和 language 是必填的;其余字段都能改善定向,有什么就发什么。 告诉 SDK 内容在哪里播放,这样事件会带上内容播放位置:
如果播放器不是 AVPlayer,改为设置 ads.playheadProvider = { seconds }。

2. 获取广告

format() 向服务器请求你传入的格式的广告。在剧集打开时就请求,而不是等到你想展示广告的那一刻:请求和加载需要一点时间,而广告应该立即出现。 服务器没有广告时它抛出 VideoAdError.noFill(reason:)。这是正常的,不是故障;稍后再请求。

3. 加载它,或拒绝它

load() 在屏幕外渲染素材,就绪后返回,所以 show() 是即时的。如果你决定不用这个广告,调用 try overlayAd?.reject(),广告主会收到通知。

4. 展示它

每种格式有自己的时刻和自己的 show()。
剧集播放时,在你选的时刻出现在播放器上的一条条幅。几秒后它会自行消失。
想提前移除,对它调用 dismiss()。
show() 要么抛错且什么都没发生,要么广告已在屏幕上。从那以后由 SDK 运行它直到结束。

5. 响应结束

实现 VideoAdDelegate。每个方法都有空的默认实现;你需要的是 didEnd。每个已展示的广告它恰好到达一次,无论是谁结束了它,所以把恢复逻辑放在这里,别处不放,并从这里请求下一个广告,让它提前就绪。
你的内容一直在播放,所以无需恢复。

6. 清理

观众离开视频时调用 destroy()。它丢弃所有持有的广告,告诉服务器哪些没有被使用,并结束屏幕上的那个。

完整代码

每集一个控制器。选择与你的格式对应的标签页: