穿山甲激励视频在uni-app中必须通过原生插件实现,官方ad组件不支持;仅限app端(ios/android),需配置manifest.json、正确集成sdk、监听adload/aderror/adclose/adreward事件,并确保广告位已审核通过。

穿山甲激励视频在 uni-app 中必须用原生插件
uni-app 的 ad 组件不支持穿山甲激励视频,官方 ad 只对接腾讯优量汇(广点通)和百度网盟。想用穿山甲,必须走「原生插件」路线——也就是在 App 平台(iOS/Android)里嵌入穿山甲 SDK,并通过 uni-app 提供的原生插件机制调用。
常见错误现象:ad unit-id 填的是穿山甲的 adSlotId,但 <ad adpid="xxx" ad-type="video"></ad> 完全没反应,控制台也无报错;或者只在 H5 环境下跑,结果广告根本加载不出来(穿山甲不支持 H5 激励视频)。
- 仅限 App 端(iOS / Android),微信小程序、H5、支付宝小程序均不可用
- 需在
manifest.json中勾选「使用原生插件」并配置对应平台的 AppKey 和 AppId(不是穿山甲后台的,是 uni-app 项目自己的) - 穿山甲后台创建的广告位类型必须是「激励视频」,且状态为「已审核通过」,否则
loadAd会静默失败
uni-app 调用穿山甲激励视频的三步关键操作
核心不是写 JS,而是打通「uni-app → 原生插件 → 穿山甲 SDK」这根链路。多数人卡在第二步:插件没正确注册或参数传错。
- 下载并导入官方推荐的原生插件(如
ad-toutiao或社区维护的uni-ad-toutiao),放进nativePlugins/目录,确保package.json中有对应id和平台支持声明 - 在页面中用
const toutiao = uni.requireNativePlugin('ad-toutiao')获取实例,不能用require或import - 调用
toutiao.loadAd({ adSlotId: 'your_adslot_id' })后,必须监听adLoad和adError事件,不能只靠 Promise.then —— 原生插件回调是异步事件驱动的
示例片段:
const toutiao = uni.requireNativePlugin('ad-toutiao')
toutiao.loadAd({ adSlotId: '901122334455667788' })
toutiao.on('adLoad', () => {
console.log('激励视频加载成功')
})
toutiao.on('adError', (err) => {
console.error('激励视频加载失败:', err.code, err.msg)
})
穿山甲激励视频「展示失败」的四个高频原因
比「加载失败」更难排查的是「加载成功但无法 show」。用户点了按钮,showAd() 却抛出 ad not ready 或直接静默退出。
-
showAd()必须在adLoad事件之后调用,且不能跨生命周期(比如在 onUnload 后再 show) - 穿山甲要求激励视频至少缓存 3 秒以上才能展示,
loadAd()后立刻showAd()大概率失败,建议加个setTimeout延迟 1–2 秒 - Android 上若未在
AndroidManifest.xml中声明android.permission.INTERNET和android.permission.ACCESS_NETWORK_STATE,会报错code: 2001(网络异常) - iOS 需在
Info.plist加NSAppTransportSecurity允许明文 HTTP(穿山甲部分资源走 HTTP),否则白屏或黑屏
收益结算与用户行为验证的关键逻辑点
穿山甲激励视频的收益不取决于「曝光」,而取决于「有效播放完成率」+「用户点击激励按钮」。uni-app 层无法直接获取「用户是否看完」「是否点击了奖励按钮」,这些必须靠原生插件透出事件。
- 务必监听
adClose事件,并检查detail.isEnded字段(true 表示用户完整看完) - 真正的奖励发放时机是
adReward事件触发时,此时detail.rewardType和detail.rewardAmount才可信,不要在adClose就发奖 - 穿山甲对「刷量」敏感,同一设备 5 分钟内重复拉取并完成激励视频,第二次起可能返回
isEnded: false,即使用户真看完了
容易被忽略的是:穿山甲后台的「激励文案」和「奖励名称」必须和你前端提示给用户的保持一致,否则用户投诉「没给奖励」,但后台其实已结算——这种体验断层没法靠代码修复。










