小程序 更新

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

posted on 2022-01-21 10:55  阿政kris*  阅读(149)  评论(0编辑  收藏  举报