不能直接用。uni-ad是广告分发层,需先在微信/支付宝/头条等平台开通流量主、创建广告位并获取adUnitId,再通过uni-ad统一API调用;否则会出现空白、undefined或授权失败等问题。
uni-ad 广告能直接用吗?先看平台和账号状态
不能直接用。uni-ad 是个“广告分发层”,它本身不提供广告,而是把微信/支付宝/头条等平台的广告 sdk 封装成统一 api。你得先在对应平台开通流量主、创建广告位、拿到 adunitid,uni-ad 才有东西可调。
常见错误现象:
- 页面空白,控制台没报错,但广告死活不显示
-
uni.createRewardedVideoAd报undefined(尤其在 H5 或 App 端) - 微信开发者工具里能加载,真机预览却提示“广告组件未授权”
使用场景决定前置条件:
- 微信小程序:必须在微信公众平台开通流量主,且小程序已发布、UV ≥ 1000
- 支付宝小程序:走
admedia.alipay.com数字推广平台,不是“支付宝流量主”那个入口(那个没权限) - App 端:需在 DCloud 后台开启原生插件,并勾选对应广告 SDK(如腾讯优量汇、穿山甲)
关键点:uni-ad 不帮你过审。类目必须合规(比如“工具-图片/视频编辑”可开,但“社交-聊天”大概率被拒),否则即使代码全对,广告也永不展示。
微信小程序激励视频广告怎么写才不白忙
核心是别绕过微信原生 API 直接用 uni-ad 封装——它在激励视频上兼容性差,容易 onLoad 不触发、onClose 漏回调。
实操建议:
- 直接用
wx.createRewardedVideoAd,别用uni.createRewardedVideoAd -
adUnitId必须是微信后台“广告位管理”里创建的,类型选“激励视频”,不能复用 Banner 或插屏 ID - 加载失败时,
onError的err.errCode是关键线索:1004是广告位未生效(刚创建要等几小时),1003是用户当天已达曝光上限
onLoad() {
if (wx.createRewardedVideoAd) {
this.videoAd = wx.createRewardedVideoAd({ adUnitId: 'adunit-xxxxxx' })
this.videoAd.onLoad(() => console.log('加载成功'))
this.videoAd.onError(err => console.error('错误码', err.errCode))
this.videoAd.onClose(this.handleAdClose)
}
}
注意:微信要求激励视频必须由用户主动触发(比如点“看广告解锁高清下载”按钮),不能自动拉起。否则审核直接拒。
广告位 ID 写死在代码里?别干这事
adUnitId 硬编码是上线后最头疼的坑——换广告位、A/B 测试、节假日停投,全得发新版本。
实操建议:
- 在 uni-app 项目里加个配置文件(如
config/ad.js),导出各平台广告位映射表 - 更稳妥的是走远程配置:启动时请求自己后台接口,返回当前生效的
adUnitId和开关状态 - 微信小程序端还要额外判断
__wxConfig.envVersion === 'release',开发版和体验版广告可能被限制
为什么重要?微信流量主后台改一个广告位状态,前端无感知;但如果你的代码里还用着上周删掉的 ID,广告就永远黑屏,且没有任何日志提示。
uni-ad 插件集成后广告不展示?先查这三处
这不是代码问题,而是配置链路上的断点。
- 检查
manifest.json中微信小程序 AppID 是否填对,且和流量主绑定的 AppID 完全一致(大小写、连字符都不能错) - 查看 uni-app 项目根目录是否有
uni_modules/uni-ad,HBuilderX 3.9+ 默认不自动安装,要手动从插件市场导入 - 真机调试时,确认手机微信版本 ≥ 8.0.20,旧版本会静默屏蔽部分广告组件
最容易被忽略的是:广告位创建后,微信需要 1–2 天同步到 CDN 节点。刚配完就测,看到空白别急着重写,等半天再试。










