uniapp
示例:
App.vue
onShow: function () {
// #ifndef H5
const updateManager = uni.getUpdateManager();
updateManager.onCheckForUpdate(function (res) {
if (res.hasUpdate) {
updateManager.onUpdateReady(function (res) {
uni.showModal({
title: "更新提示",
content: "新版本已经准备好,是否重启应用?",
success(res) {
if (res.confirm) {
updateManager.applyUpdate();
}
},
});
});
}
});
// #endif
},
这里主要是用了uniapp提供的两个api ,getUpdateManager和applyUpdate进行更新判断并且重启更新。注意,因为很多时候,uniapp会打包成h5和小程序,所以为了防止异常,需要加入条件编译语法,只有在非h5的平台才执行小程序强制更新的操作。
微信小程序
示例:
const updateManager = wx.getUpdateManager()
updateManager.onCheckForUpdate(function (res) {
if(!res.hasUpdate) return
updateManager.onUpdateReady(function () {
wx.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success: function (res) {
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
}
}
})
})
}
详解
uni.getUpdateManager()
本API返回全局唯一的版本更新管理器对象: updateManager,用于管理小程序更新。
App的更新不使用本API,另见文档:
- 整包更新:uni-app 整包升级/更新方案 - DCloud问答
- 资源文件热更新(wgt升级):uni-app 资源在线升级/热更新 - DCloud问答
平台差异说明
App | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 抖音小程序、飞书小程序 | QQ小程序 | 快手小程序 | 京东小程序 |
---|---|---|---|---|---|---|---|---|
x | x | √ | √ | √ | √ | √ | √ | √ |
updateManager 对象的方法列表:
方法 | 参数 | 说明 |
---|---|---|
onCheckForUpdate | callback | 当向小程序后台请求完新版本信息,会进行回调 |
onUpdateReady | callback | 当新版本下载完成,会进行回调 |
onUpdateFailed | callback | 当新版本下载失败,会进行回调 |
applyUpdate | 当新版本下载完成,调用该方法会强制当前小程序应用上新版本并重启 |
onCheckForUpdate(callback) 回调结果说明:
属性 | 类型 | 说明 |
---|---|---|
hasUpdate | Boolean | 是否有新的版本 |
wx.getUpdateManager()
功能描述
获取全局唯一的版本更新管理器,用于管理小程序更新。关于小程序的更新机制,可以查看运行机制文档
返回值
UpdateManager 对象,用来管理更新,可通过 wx.getUpdateManager 接口获取实例。UpdateManager 对象包括以下方法:
1.强制小程序重启并使用新版本。在小程序新版本下载完成后(即收到 onUpdateReady
回调)调用。
2.监听向微信后台请求检查更新结果事件。微信在小程序每次启动(包括热启动)时自动检查更新,不需由开发者主动触发。
UpdateManager.onCheckForUpdate(function listener)
3.监听小程序有版本更新事件。客户端主动触发下载(无需开发者触发),下载成功后回调
UpdateManager.onUpdateReady(function listener)
4.监听小程序更新失败事件。小程序有新版本,客户端主动触发下载(无需开发者触发),下载失败(可能是网络原因等)后回调