主题
信息流滑动位 —— NovvyScrollAd
内联信息流广告:load() 预加载 → attach(to:) 挂载 → setPlaying(true/false) 驱动播放。
可选 episode 覆盖该广告归属的集号(如第 1 集播放时预载第 2 集的广告)。
对接流程
Episode starts(本集开始播放)
↓
setContentContext(...) // series/episode
↓
NovvyScrollAd(adUnitId: episode:) + load()
↓
scrollAdDidLoad // 就绪(或 didFailToLoadWithError)
↓
用户划到广告位 → attach(to: container)
↓
划入 setPlaying(true) → scrollAdDidShow / 划走 setPlaying(false)
↓
detach() / destroy()接入代码
swift
let scrollAd = NovvyScrollAd(
adUnitId: "your_ad_unit_id",
episode: 2 // 可选:该广告归属的集号
)
scrollAd.delegate = self
// 1. 预加载
scrollAd.load()
// MARK: - NovvyScrollAdDelegate
func scrollAdDidLoad(_ ad: NovvyScrollAd) { /* 就绪 */ }
func scrollAd(_ ad: NovvyScrollAd, didFailToLoadWithError error: NovvyError) { /* ... */ }
func scrollAdDidShow(_ ad: NovvyScrollAd) { /* 已展示 */ }
func scrollAdDidClose(_ ad: NovvyScrollAd) { /* 已隐藏 */ }
// 2. 挂载到容器(用户划到广告位时)
scrollAd.attach(
to: containerView,
onAdPlaybackTick: { remainingSeconds in
// remainingSeconds > 0:锁定中,禁止划走;== 0:可划走
}
)
// 3. 划入广告页 → 开始曝光/倒计时;划走 → 停止
scrollAd.setPlaying(true)
scrollAd.setPlaying(false)
// 4. 释放
scrollAd.detach() // 从容器移除(触发 scrollAdDidClose)
scrollAd.destroy() // 完全释放事件回调
NovvyScrollAdDelegate 中 scrollAdDidLoad / didFailToLoadWithError 需实现,其余有默认空实现;回调统一在主线程触发。
| 回调 | 触发时机 |
|---|---|
scrollAdDidLoad(ad) | 就绪 |
scrollAd(ad, didFailToLoadWithError:) | 加载失败,error 取值见错误类型 |
scrollAdDidShow(ad) | 广告已挂载展示(不代表曝光已上报,见回调与曝光) |
scrollAdDidClose(ad) | 广告从容器移除 / 隐藏 |