主题
横幅 —— NovvyBannerAd
常驻的横幅广告位,按定时器轮播素材:只要组件挂载,SDK 就会一支接一支地填充,直到宿主 destroy()。
与其他类型有三处根本不同,对接前务必确认:
- 没有
load()—— 原生横幅在构造函数里就要拿到容器,而容器只有在平台视图创建后才存在,所以嵌入NovvyBannerAdView就是第一次请求。调用load()会通过onAdFailedToLoad报错。 - 回调按「轮」触发,不是按「广告实例」触发 —— 每隔
refreshIntervalSeconds就会再来一次onAdLoaded/onAdShowed。宿主若自行统计曝光,依赖的正是这种重复。 onAdFailedToLoad不是终态 —— SDK 会退避重试,且屏幕上已有的素材保持不动。广告实例不会被销毁,请把它当作警告而非结束;用完时由宿主自己调用destroy()。
此外,横幅是唯一会把点击回传给宿主的类型(onAdClicked)。
对接流程
NovvyAds.setContentContext(...)
↓
嵌入 NovvyBannerAdView(onPlatformViewCreated 时自动 attach,即发起首次请求)
↓
onAdLoaded → onAdShowed // 第 1 轮
↓
(用户点击)→ onAdClicked // SDK 已完成跳转与上报
↓
onAdLoaded → onAdShowed // 第 2 轮,refreshIntervalSeconds 后
↓
(某轮无货)→ onAdFailedToLoad // 非终态:退避重试,当前素材不动
↓
组件卸载 → 自动 detach;destroy() // 需宿主主动释放1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
尺寸档位
5 档尺寸沿用 IAB 规格,单位为逻辑像素(Android dp / iOS pt)。各档长宽比互不相同:后端是按长宽比给素材的,档位选错会没有填充(而不是把素材拉伸)。
NovvyBannerSize | 尺寸(逻辑像素) | 说明 |
|---|---|---|
standard | 320 × 50 | 经典手机横幅(默认值) |
large | 320 × 100 | 加高横幅 |
mediumRectangle | 300 × 250 | 中矩形 |
fullBanner | 468 × 60 | 全尺寸横幅 |
leaderboard | 728 × 90 | 通栏 |
leaderboard宽 728 逻辑像素,比任何手机都宽,直接放进竖屏布局会溢出。请套FittedBox缩放,或改用窄一些的档位。
类成员
| 成员 | 说明 |
|---|---|
onAdLoaded | 一支素材已就绪(每轮触发一次) |
onAdShowed | 素材出现在位上、曝光上报完成(每轮触发一次) |
onAdClicked | 用户点击了素材。触发时 SDK 已完成点击上报与跳转,此回调仅供宿主自己埋点 |
onAdHidden | 位上素材被清空(两轮之间渲染失败等) |
onAdFailedToLoad | 请求失败,非终态(见上文第 3 点),error 取值见错误类型 |
size | NovvyBannerSize,构造时传入,之后不可变(原生构造函数即固定尺寸;换档位需重建实例) |
refreshIntervalSeconds | 轮播间隔秒数,默认 60。原生侧会钳制到 [30, 120];<= 0 表示关闭轮播,位上只留一支素材 |
attach() | 发起请求并启动轮播(通常由 NovvyBannerAdView 自动调用) |
detach() | 停止轮播并从容器移除 |
pixelSize | Size,当前档位的逻辑像素尺寸 |
NovvyBannerAd.sizesInLogicalPixels | Map<NovvyBannerSize, Size>,上表的档位尺寸表 |
NovvyBannerAd.defaultRefreshIntervalSeconds | 60(与原生默认值一致) |
示例
dart
final ad = NovvyBannerAd(
adUnitId: 'your_ad_unit_id',
size: NovvyBannerSize.standard, // 320×50
refreshIntervalSeconds: 60, // 钳制到 [30, 120]
);
ad.onAdShowed = () { /* 本轮素材已展示 */ };
ad.onAdClicked = () { /* 自行埋点;跳转已由 SDK 完成 */ };
// 非终态:不要在这里 destroy(),SDK 会退避重试
ad.onAdFailedToLoad = (e) { /* 记日志即可 */ };
// 挂载即发起请求:
NovvyBannerAdView(ad: ad)
// 页面回收时:
ad.destroy();1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
NovvyBannerAdView固定为档位尺寸,请自行在布局中定位。组件在平台视图创建时自动attach、卸载时自动detach。