主题
暂停卡 —— NovvyPauseAd
实时暂停卡(固定 260×90 逻辑像素),在播放器暂停时展示。无 load() 预加载、无 onAdLoaded —— 嵌入 <NovvyPauseAdView> 时实时发起请求。需宿主提供 NovvyPlayerAdapter 供 SDK 读取播放状态。
在「视频暂停那一刻」嵌入组件
嵌入会立即发起请求;恢复播放时 destroy(),下次暂停重新创建并嵌入。
VIDEO 素材的出声时机:卡片挂上即开播,比旧版提前约 1 秒。旧实现刻意把开播压到曝光判定之后, 原生 SDK 1.1.4 起「曝光」与「开播」解耦——曝光归可见性判据(见回调与曝光),开播只看卡片是否已挂载。 宿主无需改代码,但暂停卡的音频会比以前更早响起。
对接流程
本集开始播放
↓
视频被暂停那一刻
↓
NovvyAds.setContentContext(...)
↓
嵌入 <NovvyPauseAdView>(视图就绪时自动 attach,实时请求)
↓
onAdShowed // 卡片显示
↓
恢复播放 → onAdHidden
↓
destroy() // 需宿主主动释放构造函数:new NovvyPauseAd(adUnitId: string)
类成员
| 成员 | 说明 |
|---|---|
onAdShowed | () => void,暂停卡展示 |
onAdHidden | () => void,卡片隐藏(播放恢复) |
onAdFailedToLoad | (error: string) => void,请求失败(无 onAdLoaded) |
attach(player: NovvyPlayerAdapter) | 实时发起请求(通常由 <NovvyPauseAdView> 自动调用)。读取一次播放状态并随请求发送,之后每 500ms 推送状态以便 SDK 检测恢复播放 |
detach() | 停止推送并移除(通常由组件卸载时自动调用) |
destroy() | 停止推送并释放原生实例 |
NovvyPauseAd.cardWidth / cardHeight | 260 / 90(逻辑像素,静态常量) |
onShownChanged | (shown: boolean) => void(内部使用):卡片显隐状态变化,组件据此切换触摸穿透 / 透明度 |
播放器适配器
宿主需提供实现 NovvyPlayerAdapter 的对象桥接自有播放器(用 getter 保证每次读取到实时状态):
ts
const player: NovvyPlayerAdapter = {
get currentPositionMs() { return videoRef.current?.positionMs ?? 0; },
get isPlaying() { return videoRef.current?.isPlaying ?? false; },
};| 成员 | 类型 | 说明 |
|---|---|---|
currentPositionMs | number(只读) | 当前播放位置(毫秒) |
isPlaying | boolean(只读) | 是否正在播放(非暂停/缓冲) |
<NovvyPauseAdView> 组件属性
| 属性 | 类型 | 说明 |
|---|---|---|
ad | NovvyPauseAd | 广告实例(无 load 步骤) |
player | NovvyPlayerAdapter | SDK 监听以检测恢复播放的播放器适配器 |
style | StyleProp<ViewStyle> | 容器样式 |
示例
tsx
const ad = useMemo(() => new NovvyPauseAd('your_ad_unit_id'), []);
useEffect(() => {
ad.onAdShowed = () => { /* 暂停卡已展示 */ };
ad.onAdHidden = () => ad.destroy(); // 恢复播放,释放
ad.onAdFailedToLoad = (e) => { /* ... */ };
return () => ad.destroy();
}, [ad]);
// 在视频暂停时嵌入(固定 260×90,自行在布局中定位):
<NovvyPauseAdView ad={ad} player={player} />
<NovvyPauseAdView>固定为 260×90,请自行在布局中定位(如放入绝对定位的覆盖层)。组件在原生视图就绪时自动attach、卸载时自动detach。
事件回调
| 回调 | 触发时机 |
|---|---|
onAdFailedToLoad(error) | 请求失败(无 onAdLoaded —— 实时请求,无预加载阶段),error 取值见错误类型 |
onAdShowed | 卡片已挂载展示(不代表曝光已上报,见回调与曝光) |
onAdHidden | 卡片隐藏(播放恢复) |
回调统一在 JS 主线程 触发。