小程序 更新
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 生命周期下调用更新检查。