小程序 更新
onShow(option) {
// onShow 方法中判断是否有更新
const updateManager = uni.getUpdateManager();
updateManager.onCheckForUpdate(res => {
// 请求完新版本信息的回调
if (res.hasUpdate) {
updateManager.onUpdateReady(res => {
uni.showModal({
title: "更新提示",
content: "新版本已经准备好,是否重启应用?",
success: res => {
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate();
}
}
});
});
}
});
updateManager.onUpdateFailed(res => {
// 新的版本下载失败
uni.showModal({
title: "提示",
content: "检查到有新版本,但下载失败,\n请检查网络设置",
success(res) {
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate();
}
}
});
});
原文档
小程序更新机制
开发者在管理后台发布新版本的小程序之后,微信客户端会有若干个时机去检查本地缓存的小程序有没有新版本,并进行小程序的代码包更新。但如果用户本地有小程序的历史版本,此时打开的可能还是旧版本。
未启动时更新
微信运行时,会定期检查最近使用的小程序是否有更新。如果有更新,下次小程序启动时会同步进行更新,更新到最新版本后再打开小程序,尽可能保证用户能够尽快使用小程序的最新版本。
总的来说,开发者在后台发布新版本之后,无法立刻影响到所有现网用户,但最差情况下,也在发布之后 24 小时之内覆盖绝大多数用户。
启动时更新
即使启动前未发现更新,小程序每次冷启动时,都会异步检查是否有更新版本。如果发现有新版本,将会异步下载新版本的代码包。但当次启动仍会使用客户端本地的旧版本代码,即新版本的小程序需要等下一次冷启动才会应用上。
如果需要马上应用最新版本,可以使用 wx.getUpdateManager API 进行处理。
实际使用
在 uniapp 的封装下,可以选择在两个生命周期中加入 wx.getUpdateManager 的调用:onLaunch 和 onShow。
- onLaunch:冷启动时调用
- onShow:任何启动或从后台切换回前台调用
更多关于冷启动等运行机制的问题,可以参考《小程序运行机制 |微信开放文档》。
onLaunch 的调用非常苛刻且不稳定(如冷启动的判断),所以,在通常情况下,我们选择在 onShow 生命周期下调用更新检查。
浙公网安备 33010602011771号