小程序开发必备的高级能力之七:更新

作者: 甚时跃马归来 | 来源:发表于2019-02-21 22:27 被阅读5次

    前言

    在开发中,很多时候,线上项目有紧急Bug,要求我们紧急更新。但现有的小程序的更新逻辑是这样的:打开小程序--> 检查本地是否有下载的版本(有则更新) --> 检查线上是否有新的版本(有则下载)--> 正常使用 -->下次冷启动(也就是小程序不在内存中了)-->检查本地是否有下载的版本(有则更新)。
    很明显,这样的流程很多时候不能满足项目的需求,好在官方提供了几个API,解决了这个问题。

    更新的API

    关于更新的API,总共有5个。分别是

    • wx.getUpdateManager() // 返回全局唯一的版本更新管理器UpdateManager
    • UpdateManager.applyUpdate() // 强制小程序重启并使用新版本。
    • UpdateManager.onCheckForUpdate(function callback) // 监听向微信后台请求检查更新结果事件。function中接收的是1个对象,对象中有个值hasUpdate,是boolean值的结果
    • UpdateManager.onUpdateFailed(function callback) // 监听小程序更新失败事件。
    • UpdateManager.onUpdateReady(function callback) // 监听小程序有版本更新事件。下载成功后回调

    实践

    新版本小程序是主动触发下载(无需开发者触发)的,所以我们更多的是做一个提示及强制小程序版本重启更新的操作。而且只有启动时才调用到,所以我们一般写在app.js中。
    主要app.js代码如下。

    
    App({
      onLaunch: function () {
        let _this = this;
        setTimeout(function(){
          _this.checkVersion();
        },2000)
      },
      checkVersion: function (){
        let updateManager = wx.getUpdateManager();
        updateManager.onCheckForUpdate(function (res) {
          console.log(res)
          if (res.hasUpdate) {
            wx.showLoading({
              title: '版本更新中,请稍等...',
            })
          } else {
            console.log('无更新')
          }
        })
        updateManager.onUpdateFailed(function () {
          // 更新失败
        })
        updateManager.onUpdateReady(function () {
          wx.hideLoading();
          wx.showModal({
            title: '新版本下载完成',
            content: '即将重启进行更新',
            showCancel: false,
            success: function (res) {
              if (res.confirm) {
                updateManager.applyUpdate(); // 强制重启小程序
              }
            }
          })
        })
      },
      globalData: {
      }
    })
    

    需要注意的是,这里的获取是否有更新的方法是异步的。所以我们可能在执行这段代码前,已经进入首页并执行请求数据的方法了。
    所以,在这里,延迟了2s请求是否有新的版本,如果有则提示新版本下载中... 这样主要是为了防止数据请求有延迟时,wx.hideLoadding()把这里的提示给隐藏掉了。

    真正开发中,建议还是自己写一个蒙层,上面加载一个自定义动画。这样可以防止网络差的时候,首页的数据请求完成后,调用wx.hideLoadding()把我们更新提示的提示信息给隐藏掉。这样的话,把检查更新的这段代码写在首页即可。

    相关文章

      网友评论

        本文标题:小程序开发必备的高级能力之七:更新

        本文链接:https://www.haomeiwen.com/subject/azqjyqtx.html