Skip to content

信息流滑动位 —— NovvyScrollAd ​

内联信息流广告,渲染为原生视图插入可滚动列表。生命周期:load() → 嵌入 NovvyScrollAdView → setPlaying(true/false) 驱动播放 → destroy()。

可选 episodeNumber 覆盖该广告归属的集号(如第 1 集播放时预载第 2 集的广告);非空时优先于 setContentContext 的 episode。

对接流程 ​

本集开始播放
        ↓
NovvyAds.setContentContext(...)                 // series/episode
        ↓
NovvyScrollAd(adUnitId, episodeNumber) + load()
        ↓
onAdLoaded                                      // 就绪(或 onAdFailedToLoad)
        ↓
嵌入 NovvyScrollAdView(onPlatformViewCreated 时自动 attach)
        ↓
划入 setPlaying(true) → onAdShowed / 划走 setPlaying(false)
        ↓
组件卸载自动 detach(不 destroy)
        ↓
宿主手动 ad.destroy()                           // 释放原生实例 / 素材

类成员 ​

成员说明
episodeNumberint? 构造参数,覆盖 bid 请求中的集号
onAdShowed广告进入视口可见
onAdHidden广告移出视口 / 隐藏
onAdPlaybackTickvoid Function(int remainingSeconds)?,每秒回调剩余锁定秒数(0 = 可划走)
attach({int? durationSeconds, bool useDefaultSwipeOverlay = true})挂载到平台视图容器(通常由 NovvyScrollAdView 自动调用)
detach()从容器移除
setPlaying(bool playing)划入视口 true、划出 false

attach() 参数:

  • durationSeconds:划走解锁的等待时长(原生会 clamp 到最小值)。
  • useDefaultSwipeOverlay:是否显示 SDK 内置「Swipe to skip」提示条;设为 false 可自行基于 onAdPlaybackTick 绘制 UI。

示例 ​

dart
final ad = NovvyScrollAd(adUnitId: 'your_ad_unit_id', episodeNumber: 2);

ad.onAdLoaded = () {
  ad.setPlaying(true);      // 当前 item 在视口内
  setState(() => _ready = true);
};
ad.onAdHidden = () { /* 隐藏 */ };
ad.onAdPlaybackTick = (remaining) { /* 更新自定义倒计时 UI */ };
ad.onAdFailedToLoad = (e) => ad.destroy();

ad.load();

嵌入组件(放在期望高度的 SizedBox 内):

dart
if (_ready)
  NovvyScrollAdView(ad: ad),

NovvyScrollAdView 在平台视图创建时自动 attach,在组件 dispose 时自动 detach。宿主仍需在广告结束后调用 ad.destroy() 释放实例。

事件回调 ​

除基类回调 onAdLoaded / onAdFailedToLoad 外,本类型的独有回调:

回调触发时机
onAdShowed广告挂载展示、曝光上报完成
onAdHidden广告从容器移除 / 隐藏
onAdPlaybackTick(remainingSeconds)每秒回调剩余锁定秒数(0 = 可划走)

onAdFailedToLoad(error) 的 error 取值见错误类型。回调统一在主 isolate(UI 线程) 触发。

本文档仅供技术对接使用,请勿外传。