1. 请求
format() 向服务器请求一个广告并返回它。它唯一的参数是你要的格式:.overlay、.pause 或 .linear。在剧集打开时请求,而不是等到你想展示广告的那一刻。
- 每种格式一个未展示的广告。 对同一格式再次调用
format()返回同一个广告,直到它被展示、拒绝或丢弃。 - 无填充是正常的。 服务器没有广告时
format()抛出noFill(reason:)。SDK 从不自行重试;在你的下一个时刻再问。原因列在 API 参考中。
2. 加载或拒绝
load()在屏幕外渲染素材,就绪后返回:图片已可绘制,视频已缓冲第一帧。加载不触发任何计费事件。再次调用立即返回;两次并发调用共享一次加载。reject()告诉服务器你不会使用这个广告,无论是否已加载。服务器告知广告主。
3. 展示
show() 要么抛错(什么都没发生),要么广告已在屏幕上。从那一刻起,无论你如何处理自己的引用,SDK 都持有该广告、计数曝光、追踪之后的每个事件并测量可见性。
- 整个应用同一时间只有一个广告在屏幕上。 第二次
show()抛出anotherAdShowing,该广告保持就绪。 - 一个广告只展示一次。 对同一个广告再次调用
show()会抛出alreadyShown;请求下一个。 - 视图很重要。 叠加和暂停广告放进内容播放所在的视图;SDK 按它定尺寸,宁可抛出
containerTooSmall也不绘制无法辨认的素材。
4. 屏幕上
广告在屏幕上时,SDK 替你运行它,并把发生的事告诉你的代理:曝光计数时、每次点击广告时,以及素材损坏时的失败。show() 之前什么都不会到达,在广告结束之前你无需做任何事。
5. 结束
每个已展示的广告恰好一次didEnd(reason),无论是谁结束了它。把恢复逻辑放在这里,别处不放。叠加和暂停广告同步执行,即使结束来自你自己的 dismiss() 或 destroy() 调用;线性广告在全屏关闭动画结束后执行,所以在其中呈现你的下一个页面是安全的。原因说明是谁结束了它;全部原因见 API 参考。
过期
每个广告都有服务器设定的有效期。过期后,load() 和 show() 抛出 invalidated(.expired),下一次 format() 返回新的广告;已经在屏幕上的广告永远不受影响。
销毁
观众离开视频时调用ads.destroy()。所有持有的广告被丢弃并告知广告主未使用,屏幕上的广告以 didEnd(.destroyed) 结束,WebView 被释放,进行中的请求或加载抛出 destroyed。
下一步
定向
发送什么,让广告与剧集和观众相匹配。
展示第一个广告
用代码走一遍生命周期,十分钟。