更新记录

2.2.0(2026-05-17)

添加鸿蒙支持

2.1.3(2026-05-17)

修复bug


平台兼容性

uni-app(3.7.7)

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

ly028-updater

App 版本升级 UTS 插件:整包 APK / wgt 热更新弹窗、下载进度、强制更新、多主题 UI、Android 国内应用市场跳转、iOS App Store 跳转。


平台支持

能力 Android iOS HarmonyOS H5/小程序
升级弹窗 + 进度
整包下载安装 ✅ (apk) ✅ (hap,需正式包验证)
wgt 下载安装重启 ⚠️ 视运行时支持
跳转应用商店 ✅ App Store ✅ 华为应用市场
应用市场跳转
版本号比较
  • 环境:HBuilderX 3.7.2+(鸿蒙建议 4.31+),uni-app Vue2/Vue3,仅 App / 鸿蒙 真机
  • 调试:需 自定义调试基座 或正式云打包(UTS 插件)
  • 鸿蒙:需使用 运行到鸿蒙downloadUrl 为应用市场链接时跳转华为应用市场(与 iOS 类似)

快速开始

1. 安装

方式一:插件市场试用(推荐,UTS 源码不可见)

DCloud 插件市场 打开本插件 详情页,按顺序操作:

  1. 导入示例工程
    点击 「使用 HBuilderX 导入示例项目」,选择本地目录,将示例工程导入到本机(导入后 HBuilderX 会自动打开该项目)。

  2. 申请试用并绑定项目
    回到插件 详情页,点击 「试用」(或「免费试用」)。
    在弹窗中选择 刚才导入到本地的示例项目(不要选错其他工程),确认后 HBuilderX 会将 加密试用版 插件安装到该项目的 uni_modules/ly028-updater(试用者看不到 UTS 明文源码)。

  3. 配置 AppID
    在示例工程中打开 manifest.json基础配置 → 点击 重新获取 AppID(须登录 DCloud 账号),保存。

  4. 制作自定义调试基座(必做)
    菜单 运行 → 运行到手机或模拟器 → 制作自定义调试基座,选择 Android 或 iOS,使用测试证书,等待云打包完成。
    UTS 插件必须编入基座,标准基座无法调试本插件

  5. 运行到真机(选择自定义基座)
    手机 USB 连接并开启调试 → 运行 → 运行到手机或模拟器 → 运行到 Android/iOS App 基座 → 选择 自定义调试基座(不要选标准基座)→ 等待安装启动。

  6. 在示例首页测试
    点击「整包升级弹窗」「wgt 热更新」「智能升级」等按钮验证;iOS 真机可测「跳转 App Store」示例。

注意:请勿单独下载示例 zip 解压使用,也勿直接打开作者 Git 仓库中的 example/ 源码目录;请始终从 插件详情页 完成「导入示例 + 试用」流程。试用包仅可用于自定义基座调试,不可用于正式发布

方式二:集成到已有项目

已购买或试用后,也可将 uni_modules/ly028-updater 复制到你项目的 uni_modules 目录,或在 HBuilderX 中从插件市场 导入插件 到当前项目。集成后同样需 制作自定义调试基座 再真机运行。

2. 挂载升级弹窗组件(重要)

uni-app 不会把 App.vue 里的 <template> 画到具体页面上,因此 <ly-updater /> 必须写在会显示升级的页面里(如首页、tab 首页),不能只写在 App.vue

页面中挂载(必做):

<template>
  <view>
    <ly-updater />
    <!-- 你的页面内容 -->
  </view>
</template>

App.vue 中初始化(推荐):

import LyUpdater from '@/uni_modules/ly028-updater/js_sdk/index.js'

export default {
  onLaunch() {
    LyUpdater.init()
  }
}

也可在页面 onLoad 中调用 LyUpdater.init()(组件 mounted 时也会自动 init)。

组件支持 easycom,一般无需在 pages.json 手动注册。

3. 调用升级

import LyUpdater from '@/uni_modules/ly028-updater/js_sdk/index.js'

// Android 整包:downloadUrl 填 apk 直链
LyUpdater.startUpdate({
  title: '发现新版本',
  content: '1、修复已知问题;\n2、优化性能;',
  downloadUrl: 'https://cdn.example.com/app/latest.apk',
  versionCode: '1.0.2',
  theme: 'aurora',
  onClose: () => console.log('弹窗关闭')
})

// iOS 整包:downloadUrl 填 App Store 地址(见下文「iOS 整包更新」)
LyUpdater.startUpdate({
  title: '发现新版本',
  content: '请前往 App Store 更新',
  downloadUrl: 'https://apps.apple.com/cn/app/id1234567890'
})

// wgt 热更新(Android / iOS 相同:填 .wgt 资源地址)
LyUpdater.wgtUpdate({
  title: '资源更新',
  content: '请点击升级',
  downloadUrl: 'https://cdn.example.com/update.wgt'
})

HarmonyOS 整包更新(华为应用市场)

鸿蒙整包升级时,downloadUrl 可填 华为应用市场详情链接 或目标应用 bundleName(通过应用市场 URI 打开),例如:

store://appgallery.huawei.com/app/detail?id=com.your.app

也可在业务层直接调用 LyUpdater.startMarket({ pageName: 'com.your.app' }) 跳转应用市场。

wgt / hap 文件下载安装依赖 uni.downloadFile + 运行时安装能力,建议在 正式打包后的鸿蒙应用 上验证;HBuilderX 标准运行基座能力可能不完整。


iOS 整包更新(App Store 地址)

苹果不允许应用内直接安装 ipa,因此 iOS 整包升级时,downloadUrl 必须填写 App Store 链接,用户点击「立即升级」后会跳转到 App Store,不会下载安装包。

downloadUrl 填什么?

类型 downloadUrl 填写内容 说明
iOS 整包 App Store 链接 必填,见下方示例
Android 整包 apk 文件 https 直链 下载后调起系统安装
wgt 热更新 .wgt 文件 https 直链 Android / iOS 相同

支持的 App Store 链接示例

任选一种可打开的商店地址即可:

https://apps.apple.com/cn/app/id1234567890
https://apps.apple.com/app/id1234567890
itms-apps://itunes.apple.com/app/id1234567890

其中 1234567890 为你在 App Store Connect 中的 Apple ID(数字),不是 Bundle ID。

代码示例

LyUpdater.startUpdate({
  title: '发现新版本',
  content: '请前往 App Store 完成更新',
  downloadUrl: 'https://apps.apple.com/cn/app/id你的AppleID',
  iosAppStoreOnly: true // 默认 true:iOS 只跳商店,不尝试下载
})

相关参数

参数 默认值 说明
downloadUrl iOS 整包必填:App Store 完整 URL
iosAppStoreOnly true true 时,iOS 点击升级调用 plus.runtime.openURL(downloadUrl) 打开商店

成功回调

iOS 跳转商店后,onSuccess 可能收到:

{ type: 'ios_store' }

表示已唤起 App Store,不代表用户已完成更新

注意

  • 请勿将 apk 地址用于 iOS 整包。
  • wgt 热更新不受此限制,downloadUrl 仍填服务器上的 .wgt 地址。
  • 若需填写应用 Bundle ID 相关跳转,请使用完整 App Store URL(推荐在后台配置好链接后下发给客户端)。

推荐接入方式

方式 入口 适用场景
LyUpdater(推荐) @/uni_modules/ly028-updater/js_sdk/index.js 弹窗 + 下载 + 版本 + 市场,一站式
UTS 原生 API @/uni_modules/ly028-updater 仅市场跳转、读版本(App 端)
// 推荐
import LyUpdater, { compareVersion, startMarket } from '@/uni_modules/ly028-updater/js_sdk/index.js'

// UTS 原生(仅 App,且需自定义基座)
import { getMarkets, getAppVersionNative } from '@/uni_modules/ly028-updater'

升级业务流程

服务端返回版本信息
       ↓
compareVersion / checkUpdate / smartUpdate 判断是否需要更新
       ↓
  ┌────┴────┐
整包更新   wgt 热更新
  ↓         ↓
startUpdate  wgtUpdate 显示弹窗
  ↓         ↓
用户点击「立即升级」
  ↓         ↓
下载 APK    下载 wgt → 安装 → 重启
  ↓
系统安装界面(Android)

版本号规则:本地 plus.runtime.version 为整包版本;wgt 版本通过 getLocalVersions() 异步获取。

// 手动判断示例
const local = await LyUpdater.getLocalVersions()
if (LyUpdater.compareVersion(local.appVersion, remote.appVersion) < 0) {
  LyUpdater.startUpdate({ ... })
} else if (LyUpdater.compareVersion(local.wgtVersion, remote.wgtVersion) < 0) {
  LyUpdater.wgtUpdate({ ... })
}

API 文档

一、LyUpdater 主对象

通过 import LyUpdater from '@/uni_modules/ly028-updater/js_sdk/index.js' 使用。

LyUpdater.init()

初始化事件监听,必须在 App.vueonLaunch 中调用一次


LyUpdater.startUpdate(options, onClose?)

显示 整包升级 弹窗。

参数 类型 必填 说明
options Object 见下方 UpdateOptions
onClose Function 弹窗关闭回调(也可写在 options.onClose

LyUpdater.wgtUpdate(options, onClose?)

显示 wgt 热更新 弹窗。参数同 startUpdate,内部 updateTypewgt


LyUpdater.close()

关闭升级弹窗;若正在下载会 中止下载任务


LyUpdater.smartUpdate(remote)

根据远程版本 自动选择 整包或 wgt,需要更新时自动弹窗。

参数 remote

字段 类型 必填 说明
appVersion String 服务端最新整包版本号
wgtVersion String 服务端最新 wgt 版本号
appDownloadUrl String 整包下载地址(整包更新时必填)
wgtDownloadUrl String wgt 下载地址(热更新时必填)
downloadUrl String 通用下载地址(作 app/wgt 的兜底)
versionText String 弹窗角标展示,如 v1.0.2
其余字段同 UpdateOptions,会传入弹窗

返回值 Promise

{
  updated: boolean,  // 是否已触发弹窗
  type: 'none' | 'app' | 'wgt',
  local: { appVersion, wgtVersion, ... },
  remote: { ... }
}

示例:

const ret = await LyUpdater.smartUpdate({
  appVersion: '2.0.0',
  wgtVersion: '2.0.1',
  appDownloadUrl: 'https://cdn.example.com/app.apk',
  wgtDownloadUrl: 'https://cdn.example.com/update.wgt',
  title: '发现新版本',
  content: '更新日志…'
})
if (!ret.updated) {
  uni.showToast({ title: '已是最新', icon: 'none' })
}

LyUpdater.getLocalVersions()

获取本地版本(App 端)。

返回 Promise

字段 说明
appVersion 整包版本(plus.runtime.version
wgtVersion 热更新资源版本
versionCode Android versionCode / iOS build
name 应用名称

LyUpdater.checkUpdate(remote)

仅判断是否需要更新,不弹窗

参数同 smartUpdate 的版本字段;返回 { type: 'none'|'app'|'wgt', local, remote }


LyUpdater.compareVersion(a, b)

版本号比较(纯 JS,全平台可用)。

  • 返回 1:a > b
  • 返回 0:相等
  • 返回 -1:a < b

支持 1.0.10v1.0.2 等格式。


LyUpdater.needAppUpdate(local, remote) / needWgtUpdate(local, remote)

是否需要整包 / wgt 更新的布尔值封装。


LyUpdater.getMarkets() 【Android】

返回本机已安装的应用市场列表。

[
  { key: 'huawei', packageName: 'com.huawei.appmarket', label: '华为应用市场' },
  ...
]

LyUpdater.startMarket(options) / startOtherMarket(options)

跳转指定 Android 应用市场中的应用详情页。

字段 类型 必填 说明
pageName String 应用包名,如 com.your.app
marketPackageName String 市场包名,如 com.huawei.appmarket
marketKey String 内置 key:huawei xiaomi oppo vivo tencent
LyUpdater.startMarket({
  pageName: 'com.tencent.mm',
  marketPackageName: 'com.huawei.appmarket'
})

// 或使用 marketKey
LyUpdater.startOtherMarket({
  pageName: 'com.your.app',
  marketKey: 'huawei'
})

LyUpdater.openPreferredMarket(pageName) 【Android】

手机品牌 自动选择已安装市场并跳转。


LyUpdater.getPreferredMarketKey() 【Android】

返回当前机型推荐的市场 key,如 huaweixiaomi


LyUpdater.getAppVersionNative() 【App】

通过 UTS 原生读取安装包版本(不含 wgt 异步信息)。


常量

名称 说明
LyUpdater.ANDROID_MARKETS 市场 key → 包名映射
LyUpdater.MARKET_LABELS 市场 key → 中文名
LyUpdater.THEMES 内置主题预设对象

二、UpdateOptions 弹窗配置项

用于 startUpdate / wgtUpdate / smartUpdate

基础内容

参数 类型 默认值 必填 说明
title String 发现新版本 标题
content String '' 更新说明(可为空字符串,不可省略)
downloadUrl String '' 下载/跳转地址。Android 整包:apk https 直链;iOS 整包:App Store 链接(见 iOS 整包更新);wgt:.wgt 直链
versionText String 头部版本角标,如 v1.0.2
showVersion Boolean true 是否显示版本角标

按钮与文案

参数 类型 默认值 说明
updateButtonText String 立即升级 主按钮文字
cancelButtonText String 稍后再说 取消链接文字
backgroundDownloadButtonText String 后台下载 后台下载按钮(仅整包 Android)
downloadMessageTip String 资源下载中,请稍候… 下载中提示
retryButtonText String 重新下载 失败重试按钮
downloadFailTip String 下载失败,请检查网络 下载失败提示
installFailTip String 安装失败,请稍后重试 安装失败提示

显示与交互

参数 类型 默认值 说明
force Boolean false 强制更新:隐藏关闭按钮与「稍后再说」
showClose Boolean true 底部圆形关闭按钮(force 时自动 false)
hideCancelButton Boolean false 隐藏「稍后再说」
hideBackgroundDownloadButton Boolean false 隐藏「后台下载」(仅整包)
contentScroll Boolean true 更新说明过长时滚动
maxContentHeight Number 320 说明区最大高度(rpx)
richText Boolean false content 使用 rich-text 渲染
template String card 布局:card(带头图)/ minimal
topImage String 自定义头部图片路径,如 /static/updater-top.png

颜色与主题

参数 类型 默认值 说明
theme String | Object aurora 主题名或自定义对象,见 主题
backgroundColor String #FFFFFF 内容区背景色
titleColor String #0F172A 标题颜色
contentColor String #64748B 说明文字颜色
buttonBackgroundColor String 按钮单色(与 theme 二选一)
buttonTextColor String #FFFFFF 按钮文字色
cancelColor String #94A3B8 取消/次要文字色
progressColor String 随主题 进度条颜色
progressTrackColor String #E2E8F0 进度条轨道色
maskColor String 随主题 遮罩层颜色

自定义 theme 对象示例:

theme: {
  headerGradient: ['#4F6DF5', '#7C3AED'],
  btnGradient: ['#4F6DF5', '#6366F1'],
  progressColor: '#06B6D4',
  maskColor: 'rgba(15, 23, 42, 0.55)'
}

内置主题 theme

风格
aurora 蓝紫渐变(默认)
ocean 海洋蓝
sunset 橙粉渐变
minimal 浅灰简约

Android 整包专用

参数 类型 默认值 说明
versionCode String APK 版本标识;用户取消安装后避免重复下载同一包
iosAppStoreOnly Boolean true 仅 iOS 整包:为 true 时用 downloadUrl 打开 App Store,不下载 ipa

wgt 专用

参数 类型 默认值 说明
wgtForceRestart Boolean true 安装成功后自动 restart
wgtInstallForce Boolean false 传给 plus.runtime.install 的 force

回调

参数 类型 说明
onClose Function 弹窗关闭(含点 X、取消;后台下载也会触发)
onProgress Function (percent, downloadTask) => {} 下载进度 0–100
onSuccess Function (result) => {} 下载安装成功,result.type: app | wgt | ios_store
onError Function (error) => {} 下载或安装失败

失败重试

参数 类型 默认值 说明
retryOnFail Boolean true 失败时显示重试按钮

三、Android 应用市场 marketKey 一览

marketKey 包名 说明
huawei com.huawei.appmarket 华为
honor com.hihonor.appmarket 荣耀
oppo com.oppo.market OPPO
vivo com.bbk.appstore vivo
xiaomi / redmi com.xiaomi.market 小米
meizu com.meizu.mstore 魅族
lenovo com.lenovo.leos.appstore 联想
samsung com.sec.android.app.samsungapps 三星
qihoo com.qihoo.appstore 360
baidu com.baidu.appsearch 百度
tencent / yingyongbao com.tencent.android.qqdownloader 应用宝
wandoujia com.wandoujia.phoenix2 豌豆荚
pp com.pp.assistant PP 助手
google com.android.vending Google Play
nubia com.nubia.neostore 努比亚
zte zte.com.market 中兴
zhuoyi com.zhuoyi.market 卓易
meitu com.android.mobile.appstore 美图

也可使用 LyUpdater.ANDROID_MARKETS 查看完整映射。


manifest 权限建议

在业务项目 manifest.json → App 模块配置 → Android 权限中确保包含:

  • 访问网络
  • 读写存储(视 targetSdk 与下载方式)
  • 安装未知应用(Android 8+ 装 APK)

iOS 整包更新仅需跳转 App Store,无额外安装权限。


完整业务示例

import LyUpdater from '@/uni_modules/ly028-updater/js_sdk/index.js'

export async function checkAppUpdate() {
  const res = await uni.request({
    url: 'https://api.example.com/app/version',
    method: 'GET'
  })
  const data = res.data

  await LyUpdater.smartUpdate({
    appVersion: data.appVersion,
    wgtVersion: data.wgtVersion,
    appDownloadUrl: data.apkUrl,
    wgtDownloadUrl: data.wgtUrl,
    title: '发现新版本 v' + data.appVersion,
    content: data.changelog,
    versionCode: data.verCode,
    force: data.forceUpdate === true,
    theme: 'aurora',
    onSuccess: (r) => console.log('升级成功', r),
    onError: (e) => console.error(e)
  })
}

常见问题

Q:调用了 startUpdate 但没有弹窗?
A:检查是否在当前页面的 template 中写了 <ly-updater />。仅写在 App.vue 里无效。并确认已 LyUpdater.init()

Q:运行提示基座不包含插件?
A:制作并运行 自定义调试基座,不要只用标准基座。

Q:iOS 整包 downloadUrl 填什么?
A:填 App Store 链接,例如 https://apps.apple.com/cn/app/id1234567890。详见上文 iOS 整包更新(App Store 地址)

Q:iOS 能否应用内装 ipa?
A:不能。需在 downloadUrl 填写 App Store 地址,用户点击后跳转商店更新。

Q:能否只跳转市场不下载?
A:可以,直接调用 startMarket,不调用 startUpdate

Q:版本比较用 UTS 还是 JS?
A:本插件版本比较在 js_sdk/version.js,请从 js_sdk/index.js 导入 compareVersion


本地试用

插件市场用户请按上文 「方式一:插件市场试用」 操作。
插件作者本地改代码请打开仓库 example/ 目录,详见 docs/测试与发布.md


更新日志

changelog.md

隐私、权限声明

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

Android:网络、存储、安装未知应用;iOS:跳转 App Store;HarmonyOS:网络、跳转应用市场

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

插件不采集任何数据

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