更新记录

0.11.3(2026-11-05) 下载此版本

  • 优化 WGT 下载安装提示文案,现在会在点击下载后自动安装并提示是否重启

0.11.2(2026-10-10) 下载此版本

  • 新增 uni-app x 客户端安装 APK 前支持 SHA256 校验:发布端开启 校验 sha256 后生效,摘要不匹配或为空会阻止安装;uni1 客户端忽略该开关(依赖 uni-admin 3.0.2)
  • 优化 检查更新失败时透传云端返回的错误信息
  • 修复 iOS 端开启更新提示并取消重启后,应用回到前台不自动重启生效的问题

0.11.1(2026-10-01) 下载此版本

  • 修复 vapor 应用升级弹窗背景颜色跟随全局 page 选择器样式,导致显示异常
查看更多

平台兼容性

云端兼容性

支付宝云 腾讯云 阿里云
√ √ √

uni-app(4.35)

Vue2 Vue2插件版本 Vue3 Vue3插件版本 Chrome Safari app-vue app-vue插件版本 app-nvue app-nvue插件版本 Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本
√ 0.9.11 √ 0.9.11 - - √ 0.9.11 √ 0.8.3 5.0 0.8.3 12 0.8.3 12 0.9.1
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × - × ×

uni-app x(4.65)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本 微信小程序
× × 5.0 0.9.0 12 0.9.0 √ 0.9.11 ×

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × √ ×

文档

完整的升级中心配置、云函数和管理后台说明请参阅 uni-upgrade-center。

UpdateManager

UpdateManager 统一管理检查更新、打开升级弹窗、安装完成通知、重启生效和失败事件。推荐在应用入口和业务页面复用同一个管理器实例:

import { createUpdateManager } from '@/uni_modules/uni-upgrade-center-app/utils/update-manager'

const updateManager = createUpdateManager()
const result = await updateManager.checkUpdate()
if (result.hasUpdate && result.packageInfo != null) {
  await updateManager.showUpdate()
}

showUpdate 不传更新包信息时,会使用最近一次 checkUpdate 返回的更新包及其任务上下文。重复调用时,在上一次弹窗打开完成前会复用同一个 Promise,避免重复打开升级页面。

平台约定

  • uni-app x 使用 uni.openDialogPage 打开内置升级页,打开失败时会清理临时存储。
  • 传统 App 使用 uni.navigateTo 打开升级页,打开失败时同样会清理临时存储。
  • HarmonyOS Next 需要传入平台升级组件作为第二个参数:showUpdate(packageInfo, component)。
  • cloud:// 下载地址会先解析为临时 URL;解析失败时 showUpdate 会 reject,不会继续打开无效地址。
  • Vapor wgt 安装完成后不会自动重启,业务可调用 applyUpdate(),或使用 notifyUpdateReady 的提示策略。

任务身份

UpdateTaskContext 为 { taskId: string, checkId: number }。管理器在检查开始时生成一次不透明 taskId,UpdateCheckEvent.taskContext 将它与本次 checkId 关联。解析 cloud://、下载、校验、安装、WGT ready、提醒及重启失败均传递同一任务身份;taskId 不包含下载 URL 或阶段,不应由调用方解析。后续检查不会改写已经开始的异步任务上下文。

  • 无参 showUpdate() 使用缓存包及缓存上下文;显式 showUpdate(packageInfo) 没有上下文时视为手动升级,分配新任务且 checkId = 0,即使传入的包来自最近一次检查也不自动关联。
  • 需要显式关联检查时使用 showUpdate(event.packageInfo, component, event.taskContext),非 Harmony 平台的 component 可传 null。旧 check-update 入口会自动传递本次检查上下文,原有 options 和组件参数不变。
  • 自定义下载或安装流程可调用 createTaskContext(checkId?) 创建上下文,省略 checkId 时为 0。一次尝试只创建一次,并将其传到后续回调;新尝试应创建新上下文。
  • UpdateReadyEvent.checkId 与 UpdateCheckEvent.taskContext 在类型中是可选字段,保持旧事件对象的构造兼容;当前管理器发出的事件会填写它们。重启失败事件保留 ready 包的 packageInfo、taskId 和 checkId,并恢复 ready 状态以便再次调用 applyUpdate()。
  • notifyUpdateReady(packageInfo, taskId?, promptAfterInstall?, taskContext?) 保留原前三个参数,额外上下文是第四个可选参数;显式 taskId 仍优先使用,没有上下文时 checkId = 0。
  • notifyApkDownloaded(packageInfo, filePath, taskContext?) 与 startNotificationDownload(packageInfo, taskContext?) 只增加末尾可选上下文。管理器会复制上下文字段;后台 WGT 和通知下载各自保留开始时的上下文,已下载通知包复用原任务。

两种内置升级页使用独立的临时存储 key,传递 { packageInfo, taskContext },不会往安装包字段中混入上下文。每次打开使用不同 key,页面 onLoad 读取后立即删除本次 key,打开失败也清理本次 key。读取兼容历史裸包和 check-update-nvue 入口;裸包按手动任务处理,不重写旧 nvue 检查流程。

uni1 Harmony 组件的 show(true, packageInfo, taskContext?) 保留原前两个参数。自定义的旧两参数组件可以忽略第三个值并正常显示;需要事件身份关联的外部组件必须接收并转发这个可选上下文,没有适配时不会推测它的新 API 或自动借用最近一次检查。

提醒与失败

Android APK 的 is_update_prompt = true 直接进入通知下载,不打开初始升级页,下载完成后等待用户确认;uni-app x 仅在确认安装后按 verify_sha256 校验并唤起安装器。false 或缺失时保留普通升级页,is_silently 不作为 APK 下载分流条件。APK 不发 WGT ready 或重启事件。通知插件异常只影响通知展示,不阻塞下载完成提示、校验和安装。

支持 WGT 的 Vapor Android/iOS 和 uni1 保留自动下载安装后的 ready、modal/toast 提醒和重复通知守卫;静默 WGT 只安装,不提示或主动重启。两种 popup 下载及安装失败也会发失败事件,APK 校验失败的 UI 重置不会额外重复发一个 download 阶段事件;popup 的 WGT 重启统一调用 applyUpdate()。

APK SHA256 校验

发布记录开启 verify_sha256 后,uni-app x 客户端会在安装 APK 前校验安装包 SHA256:摘要不匹配会阻止安装并提示重新下载,开关开启但摘要为空会提示配置错误。该开关与校验仅对 uni-app x 生效,uni1 客户端会忽略。

应用生命周期

如果需要支持用户取消重启后在应用切后台时自动生效,请在 App.uvue 中转发应用生命周期:

const updateManager = createUpdateManager()

onAppShow(() => updateManager.handleAppShow())
onAppHide(() => updateManager.handleAppHide())

事件监听

可通过以下方法监听更新状态,并在页面卸载或不再需要时移除监听:

  • onCheckForUpdate / offCheckForUpdate
  • onUpdateReady / offUpdateReady
  • onUpdateFailed / offUpdateFailed

检查更新的测试参数类型为 CheckUpdateOptions,支持注入 appid、appVersion 和 appWgtVersion;正式环境不传参数时会读取当前应用信息。

纯 Node 回归

持久测试位于本模块 tests/,可随模块同步到测试项目,无需复制临时脚本或修改同步脚本。从项目根目录运行:

HBUILDERX_PATH="<HBuilderX .app 或包含 plugins 的目录>" node --test uni_modules/uni-upgrade-center-app/tests/*.test.cjs

前置条件为支持 node:test 的 Node.js(建议 Node.js 20+)和已安装 HBuilderX 的 UTS 插件。测试通过 HBUILDERX_PATH 定位 plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/typescript/lib/typescript.js;路径缺失或文件不存在时明确报错,不回退到硬编码机器或工作区路径。源码位置相对测试文件定位。

测试 helper 支持嵌套条件编译、&&/||/否定/括号/#else,使用 HBuilderX TypeScript 的 transpileModule 将所选模式的脚本交给 Node VM。覆盖 Vapor/VDOM、iOS、uni1/nvue 和 Harmony 检查参数,APK/WGT 提醒、SHA256 安装前调用、通知异常隔离、任务身份及 A/B 检查隔离、popup 新旧存储兼容与清理、旧组件签名和重启失败恢复。

这些是纯 Node 模拟回归,下载、文件系统、原生安装、通知、Vue 状态及生命周期均由测试桩提供,不是设备实测,也不是 UTS/Kotlin 编译验证。真实摘要计算、安装器回调、Harmony 外部组件适配及各平台原生编译仍需人工验证;运行此命令不会调用 HBuilder CLI、部署、启动模拟器或浏览器。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

升级中心 uni-upgrade-center - App(以下简称软件)源码使用许可协议

2022年10月

本许可协议,是数字天堂(北京)网络技术有限公司(以下简称DCloud)对其所拥有著作权的“软件”,提供的使用许可协议。

您对“软件”的复制、使用、修改及分发受本许可协议的条款的约束,如您不接受本协议,则不能使用、复制、修改本软件。

授权许可范围

a) 授予您永久性的、全球性的、免费的、非独占的、不可撤销的本软件的源码使用许可,您可以使用这些源码制作自己的应用。

b) 您只能在DCloud产品体系内使用本软件及其源码。您不能将源码修改后运行在DCloud产品体系之外的环境,比如客户端脱离uni-app,或服务端脱离uniCloud(如涉及uniCloud)。

c) DCloud未向您授权商标使用许可。您在根据本软件源码制作自己的应用时,需以自己的名义发布软件,而不是以DCloud名义发布。

d) 本协议不构成代理关系。

DCloud的责任限制 “软件”在提供时不带任何明示或默示的担保。在任何情况下,DCloud不对任何人因使用“软件”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。

您的责任限制

a) 您需要在授权许可范围内使用软件。

b) 您在分发自己的应用时,不得侵犯DCloud商标和名誉权利。

c) 您不得进行破解、反编译、套壳等侵害DCloud知识产权的行为。您不得利用DCloud系统漏洞谋利或侵害DCloud利益,如您发现DCloud系统漏洞应第一时间通知DCloud。您不得进行攻击DCloud的服务器、网络等妨碍DCloud运营的行为。未经书面许可,您不得利用DCloud的产品进行与DCloud争夺开发者的行为。

d) 如您违反本许可协议,需承担因此给DCloud造成的损失。

本协议签订地点为中华人民共和国北京市海淀区。

根据发展,DCloud可能会对本协议进行修改。修改时,DCloud会在产品或者网页中显著的位置发布相关信息以便及时通知到用户。如果您选择继续使用本框架,即表示您同意接受这些修改。

条款结束