App端开屏广告无法动态加载,仅支持manifest.json静态配置;uni.createSplashAd在App端无效;会员免看需客服授权plus.ad.setSplashAd权限;真动态控制须改用伪开屏页方案。

uni-app App端开屏广告根本不能“动态加载”
App端开屏广告不是JS控制的页面组件,它由DCloud原生层在冷启动阶段接管,manifest.json配置生效后即固定加载,不存在运行时动态拉取广告素材或切换广告位的行为。所谓“动态加载”,实际是混淆了三个不同层级:原生开屏(不可控)、伪开屏页(可JS控制)、以及广告联盟后台的实时素材下发(不暴露给前端代码)。
为什么uni.createSplashAd在App端无效
这个API仅对小程序有效,App端调用会静默失败或报错undefined is not a function。uni-app 2.5.2+ 的App开屏完全走uni-ad原生容器,不走Vue生命周期,也不接受JS创建广告实例。你在app.vue里写uni.createSplashAd({adUnitId: 'xxx'}),只会浪费一个空对象,不会触发任何广告请求。
- App端真正生效的入口只有
uni-ad后台开通 +manifest.json中appid与后台完全一致 - 广告素材(含视频、跳转链接、倒计时文案)全部由广告平台后台配置,实时下发,无需发版
- 真机调试时搜索日志关键词
adSplash或fullScreenAd,看到loaded: true才算接入成功
想让会员免看开屏?必须走plus.ad.setSplashAd + 客服授权
这个API确实存在,但默认被禁用。直接在onLaunch里调用plus.ad.setSplashAd(false)不会生效,打包运行后依然展示广告——这是设计使然,不是你代码写错了。
- 必须先联系
uni-ad客服申请“动态开关权限”,授权后该API才起作用 - 授权过程需提供应用包名、DCloud账号及使用场景说明,通常1–2个工作日完成
- 启用后,可在
onLaunch中读取本地缓存uni.getStorageSync('isVip'),再决定是否关闭 - 注意:该开关只影响冷启动,热启动(切后台再切回)本就不展示开屏,无需干预
真要“动态”控制,只能退到伪开屏页方案
如果你坚持要在JS层完全掌控广告逻辑(比如根据用户画像加载不同视频、A/B测试跳转链、或与登录态强耦合),那就放弃原生开屏,改用「启动图+首屏nvue视频页」组合。但这不再是平台级开屏,而是模拟行为,需手动处理所有细节:
- 在
manifest.json中设"autoclose": false,禁用原生启动页自动关闭 - 首页设为
pages/splash/index.vue(非tabBar页),用或nvue播放,资源放static/目录 - 播放前必须调
uni.hideLaunchScreen(),否则启动图和视频页会重叠或闪屏 - Android需确认MP4编码为
H.264 + AAC,iOS需加playsinline和muted - 倒计时和跳过按钮逻辑全由JS控制,但要注意
isJumping锁状态,避免重复跳转
这种方案绕开了广告联盟审核,但也失去计费能力、合规保障和系统级倒计时精度——它只是个带视频的欢迎页,不是广告。











