微信小程序微信小程序开发躺坑之路微信小程序开发者

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

2019-02-21  本文已影响5人  甚时跃马归来

前言

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

更新的API

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

实践

新版本小程序是主动触发下载(无需开发者触发)的,所以我们更多的是做一个提示及强制小程序版本重启更新的操作。而且只有启动时才调用到,所以我们一般写在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()把我们更新提示的提示信息给隐藏掉。这样的话,把检查更新的这段代码写在首页即可。

上一篇 下一篇

猜你喜欢

热点阅读