主题
信息流滑动位 —— NovvyScrollAd
内联信息流广告:load() 预加载 → attach(container) 挂载 → setPlaying(true/false) 驱动播放。
可选 episode 覆盖该广告归属的集号(如第 1 集播放时预载第 2 集的广告)。
对接流程
Episode starts(本集开始播放)
↓
setContentContext(...) // series/episode
↓
NovvyScrollAd(adUnitId, episode) + load()
↓
onAdLoaded // 就绪(或 onAdFailedToLoad)
↓
用户划到广告位 → attach(container)
↓
划入 setPlaying(true) → onAdShown / 划走 setPlaying(false)
↓
detach() / destroy()接入代码
kotlin
val scrollAd = NovvyScrollAd(
adUnitId = "your_ad_unit_id",
episode = 2, // 可选:该广告归属的集号
)
// 1. 预加载
scrollAd.load(object : NovvyScrollAdListener {
override fun onAdLoaded(ad: NovvyScrollAd) { /* 就绪 */ }
override fun onAdFailedToLoad(ad: NovvyScrollAd, error: NovvyError) { /* ... */ }
override fun onAdShown(ad: NovvyScrollAd) { /* 已展示 */ }
override fun onAdHidden(ad: NovvyScrollAd) { /* 已隐藏 */ }
})
// 2. 挂载到容器(用户划到广告位时)
scrollAd.attach(
container = container,
onAdPlaybackTick = { remainingSeconds ->
// remainingSeconds > 0:锁定中,禁止划走;== 0:可划走
},
)
// 3. 划入广告页 → 开始曝光/倒计时;划走 → 停止
scrollAd.setPlaying(true)
scrollAd.setPlaying(false)
// 4. 释放
scrollAd.detach() // 从容器移除(触发 onAdHidden)
scrollAd.destroy() // 完全释放事件回调
NovvyScrollAdListener 方法均有空实现默认值,按需重写;回调统一在主线程触发。
| 回调 | 触发时机 |
|---|---|
onAdLoaded(ad) | 广告及素材已就绪,可挂载 |
onAdFailedToLoad(ad, error) | 加载失败,error 为 NovvyError,取值见错误类型 |
onAdShown(ad) | 广告挂载展示、曝光上报完成 |
onAdHidden(ad) | 广告从容器移除 / 隐藏(detach() 也会触发) |
另有一个通过 attach() 传入的回调,不在 listener 上:
| 回调 | 触发时机 |
|---|---|
onAdPlaybackTick(remainingSeconds) | 播放中每秒回调剩余锁定秒数:> 0 表示锁定中、禁止划走,== 0 表示可划走 |
集数覆盖
NovvyScrollAd 常在「当前集」预载「下一集」的广告,全局上下文里的 episode 不一定对得上,所以构造参数 episode = N 会覆盖上下文的 episode(series / url 仍取自上下文)。详见用户与内容上下文。