uni-app app端开屏视频广告必须通过uni-ad原生体系实现,因原生层需控制生命周期、保证广告展示完整性及合规性;pages/splash.vue+video标签无效,因其属webview层,启动时机晚于原生开屏阶段,且无法满足自动播放、广告回调、系统级倒计时等要求。

uni-app App端不支持直接用 video 标签或自定义页面实现“开屏视频广告”——这不是技术限制,而是平台规范和广告联盟的强制要求:开屏必须由原生层控制生命周期,确保广告展示完整、跳过逻辑合规、倒计时准确、点击可跳转且不被 JS 阻塞。
为什么不能用 pages/splash.vue + video 标签做开屏视频
因为开屏广告在 native 启动阶段(Application 启动 → Activity/ViewController 创建 → 主界面渲染前)就必须加载并展示,此时 Vue 实例甚至还没初始化。你写的 splash.vue 是 Webview 层内容,属于「主界面的一部分」,已经错过开屏时机。
- 用户看到的“闪一下黑屏→进 splash.vue”其实是两次渲染:原生开屏空白期 + Vue 页面加载延迟
-
video标签在 Android/iOS 原生容器中无自动播放权限(尤其 iOS 静音策略),无法保证首帧秒出 - 无法接入优量汇、穿山甲等广告 SDK 的开屏回调(如
onAdShow、onAdClick、onAdClose),导致广告计费失败或违规下线 - 倒计时若用 JS 实现,App 切后台再切回时容易错乱,而原生开屏的倒计时是系统级 Timer,不受 JS 生命周期影响
正确路径:只走 uni-ad 开屏广告体系
必须通过 uni-ad 广告联盟后台 申请开通「开屏广告」权限,并配置对应渠道(如优量汇 Android、穿山甲 iOS),然后在 HBuilderX 打包时勾选广告渠道。整个过程不写一行广告 JS 代码,也不改 pages/splash.vue。
- uni-app x 2.5.2+ 和 5+Runtime 4.0+ 已内置开屏原生容器,只要 manifest.json 中填了合法
appid,且打包时勾选了广告渠道,开屏就自动启用 - 广告素材(含视频)、跳过按钮样式、倒计时文案、跳转链接全部在 uni-ad 后台配置,实时生效,无需发版
- 测试阶段用 HBuilderX 标准基座即可预览,广告位 ID(
adpid)不用填,系统自动匹配测试广告 - 正式打包前,需在
manifest.json → 模块权限配置 → Ad中开启「广告模块」,否则原生层不加载广告 SDK
关键配置项和易错点
很多开发者卡在打包后没广告,问题几乎都出在以下三处:
-
manifest.json里"name"和"appid"必须与 uni-ad 后台创建应用时完全一致(大小写、空格、符号都不能差) - iOS 打包需额外在
ios/Info.plist中添加NSUserTrackingUsageDescription描述(即使不开 ATT),否则穿山甲等 SDK 初始化失败,开屏静默降级为空白 - Android 端若使用 v4.22+,需确认
android/app/build.gradle中已引入DCUniAdGm.xcframework对应的 aar(HBuilderX 会自动注入,但自定义原生工程可能漏掉) - 开屏广告默认只在「冷启动」触发(即进程不存在时启动),热启动(App 在后台,点击图标唤起)不会展示——这是所有广告平台通用规则,不是 bug
真正需要你动手的地方只有两处:uni-ad 后台配广告、manifest.json 填对 appid。其它全是原生层自动完成。想用自定义视频?那得自己写原生插件对接穿山甲 TTAdManager 或优量汇 QSplashAD,但失去 uni-ad 的多渠道自动比价和后台运营能力,得不偿失。











