主题
暂停卡 —— NovvyPauseAd
实时暂停卡(固定 260×90 逻辑像素),在播放器暂停时展示。无 load() 预加载、无 onAdLoaded —— 嵌入 NovvyPauseAdView 时实时发起请求。需宿主实现 NovvyPlayerAdapter 供 SDK 读取播放状态。
在「视频暂停那一刻」嵌入组件
嵌入会立即发起请求;恢复播放时 destroy(),下次暂停重新创建并嵌入。
对接流程
本集开始播放
↓
视频被暂停那一刻
↓
NovvyAds.setContentContext(...)
↓
嵌入 NovvyPauseAdView(onPlatformViewCreated 时自动 attach,实时请求)
↓
onAdShowed // 卡片显示
↓
恢复播放 → onAdHidden
↓
destroy() // 需宿主主动释放类成员
| 成员 | 说明 |
|---|---|
onAdShowed | 暂停卡展示 |
onAdHidden | 卡片隐藏(播放恢复) |
onAdFailedToLoad | 请求失败(无 onAdLoaded) |
attach(NovvyPlayerAdapter player) | 实时发起请求(通常由 NovvyPauseAdView 自动调用)。读取一次播放状态并随请求发送,之后每 500ms 推送状态以便 SDK 检测恢复播放 |
detach() | 停止推送并移除 |
NovvyPauseAd.cardWidth / cardHeight | 260 / 90(逻辑像素) |
NovvyPauseAd.viewType | 'ai.novvy.novvy_ads/pause_ad'(内部使用) |
shownNotifier | ValueNotifier<bool>,组件据此切换触摸穿透(内部使用) |
播放器适配器
宿主需实现 NovvyPlayerAdapter 桥接自有播放器:
dart
class MyPlayerAdapter extends NovvyPlayerAdapter {
final VideoPlayerController controller;
MyPlayerAdapter(this.controller);
@override
int get currentPositionMs => controller.value.position.inMilliseconds;
@override
bool get isPlaying => controller.value.isPlaying;
}| 成员 | 类型 | 说明 |
|---|---|---|
currentPositionMs | int | 当前播放位置(毫秒) |
isPlaying | bool | 是否正在播放(非暂停/缓冲) |
示例
dart
final ad = NovvyPauseAd(adUnitId: 'your_ad_unit_id');
ad.onAdShowed = () { /* 暂停卡已展示 */ };
ad.onAdHidden = () { /* 隐藏(恢复播放) */ };
ad.onAdFailedToLoad = (e) { /* ... */ };
// 在视频暂停时嵌入:
NovvyPauseAdView(ad: ad, player: myPlayerAdapter)
// 恢复播放时释放:
ad.destroy();
NovvyPauseAdView固定为 260×90,请自行在布局中定位(如放入Stack/Align)。组件在平台视图创建时自动attach、卸载时自动detach。
事件回调
| 回调 | 触发时机 |
|---|---|
onAdFailedToLoad(error) | 请求失败(无 onAdLoaded —— 实时请求,无预加载阶段),error 取值见错误类型 |
onAdShowed | 卡片挂载展示、曝光上报完成 |
onAdHidden | 卡片隐藏(播放恢复) |
回调统一在主 isolate(UI 线程) 触发。