跳转到主要内容
每个广告都经历同样的阶段,每个阶段就是一次调用。SDK 为每种格式最多持有一个未展示的广告,所以你可以提前请求、保留它,并在时机到来时展示。
format()、load()、show()、didEnd 依次排列;reject() 和展示前结束为旁路

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。

下一步

定向

发送什么,让广告与剧集和观众相匹配。

展示第一个广告

用代码走一遍生命周期,十分钟。