uni-app怎么实现App端静默升级功能 uni-app热更新wgt静默安装【代码】

酷瑶小哥_4950

酷瑶小哥_4950

2026-04-08

1111人浏览

原创

uni-app app端静默升级不能靠uni.downloadfile+uni.installdocument实现,因ios禁止静默安装,android 8.0+需用户授权且必显系统安装页;真正静默的只有wgt热更新,仅限5+app引擎,通过替换webview资源实现无感生效。

uni-app怎么实现app端静默升级功能 uni-app热更新wgt静默安装【代码】

uni-app App端静默升级为什么不能靠 uni.downloadFile + uni.installDoucment 直接搞定

因为 iOS 完全禁止静默安装,而 Android 从 8.0(API 26)起强制要求用户授权 REQUEST_INSTALL_PACKAGES 权限,且安装界面必须显式弹出——所谓“静默”仅指不跳转到应用市场、不依赖用户手动点击下载按钮,但最终安装动作无法绕过系统确认页。

真正能走静默路径的,只有 wgt 包热更新(仅限 uni-app 自有运行环境,即 5+App 引擎)。它不涉及 APK 安装,而是替换 webview 资源,所以能无感生效。

  • wgt 升级只对使用 uni-app 编译为「原生渲染」或「自定义基座」的 App 有效;HBuilderX 打的标准云打包基座才支持
  • 微信小程序、H5、快应用等其他平台不支持 wgt
  • 升级后需调用 uni.reLaunch 或 plus.runtime.restart() 才会加载新资源,否则仍运行旧代码

怎么用 plus.runtime.getProperty 和 plus.runtime.install 检查并安装 wgt

必须通过 5+ API 拿到本地版本号和远程 wgt 的 versionCode 对比,再触发下载安装。不能只靠 HTTP 状态码或文件名判断是否需要更新。

  • plus.runtime.getProperty 返回的是当前 wgt 的 versionCode(数字),不是 version(字符串),对比时务必统一类型
  • plus.runtime.install 的第二个参数是回调对象,success 回调里必须调用 plus.runtime.restart(),否则新包不会启用
  • 下载 wgt 建议用 plus.downloader.createDownload 而非 uni.downloadFile,前者支持断点续传、进度监听,且返回的 filename 是绝对路径,可直接传给 install
const dt = plus.downloader.createDownload('https://xxx.com/app.wgt', {
  method: 'GET'
}, (d, status) => {
  if (status === 200) {
    plus.runtime.install(d.filename, {}, () => {
      plus.runtime.restart(); // 关键!不写这句,升级白做
    }, console.error);
  }
});
dt.start();

Android 上 wgt 静默升级失败的三个典型错误现象

不是代码写错,而是环境或配置没到位:

  • 报错 install wgt fail: invalid wgt file → wgt 包未用 HBuilderX 正确打包(必须勾选「生成 wgt 包」,且目标平台选「App」,不能用「通用」或「H5」模式)
  • 升级后页面白屏或样式错乱 → 新 wgt 中引用了旧版 uni-app 的 API(如 uni.getSystemInfoSync 在低版本 5+ 引擎中不存在),需检查基座版本兼容性
  • 反复提示“正在升级”但无反应 → 服务器返回的 wgt 文件 MIME 类型不是 application/octet-stream,Nginx/Apache 需显式配置:add_type application/octet-stream .wgt;

如何让 wgt 升级真正“无感”:避免白屏、闪退、状态丢失

用户感知的“静默”,本质是视觉和交互不中断。这需要前端主动兜底,而不是等引擎自动 reload。

  • 升级前用 uni.showLoading({ title: '更新中...' }) 遮盖界面,防止用户乱点;成功后 uni.hideLoading(),再 plus.runtime.restart()
  • 不要在 onLaunch 或 onShow 里立刻请求升级,先用 setTimeout 延迟 1–2 秒,避开首屏渲染卡顿
  • 如果业务依赖 Vuex/Pinia 状态,升级前把关键数据存到 uni.setStorageSync,重启后在 onLaunch 里恢复——plus.runtime.restart() 会清空内存,但本地存储保留

最麻烦的其实是 wgt 版本管理和灰度发布:每次发新版都得改 manifest.json 的 versionCode,还得配套一套服务端下发策略。这点没人替你扛,得自己搭个轻量接口。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2583

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5603

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6610

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6278

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

883

5

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

2026.10.21

20

15

Playwright 页面操作指南
Playwright 页面操作指南

Playwright页面操作专题汇集元素定位、点击与输入、等待响应、多页面切换、Iframe、事件监听及文件处理的已审核文章,便于按操作场景查阅示例与常见问题。

2026.10.21

0

16

Playwright 入门教程
Playwright 入门教程

Playwright入门专题汇集测试框架安装、VS Code配置、录制脚本、编写首个用例、运行调试及查看报告的已审核文章,帮助初学者搭建端到端测试流程。

2026.10.21

0

16

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

2026.10.16

120

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.9万人学习