微信小程序版本自动更新

微信小程序版本自动更新

知识点1: 当用户点击左上角关闭,或者按了设备Home 键离开微信,小程序并没有直接销毁,而是进入了后台
当再次进入微信或再次打开小程序,又会从后台进入前台,只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。

知识点2: 小程序的启动分为"冷启动" 和 “热启动”.
热启动是指: 小程序打开后,在一段时间内(目前:5分钟)再次被打开,此时会将后台的小程序切换到前台。
冷启动是指: 小程序首次打开或销毁后再次被打开

知识点3: 更新版本
冷启动时, 如果发现有新版本,将会异步下载新版本的代码包,并同时用客户端本地的包进行启动,即新版本的小程序需要等下一次冷启动才会应用上。

如果要马上应用最新版本,使用 wx.getUpdateManager API 进行处理。

代码如下:
在app.js里写下以下代码

 onLaunch () {
    if (wx.canIUse('getUpdateManager')) {
      const updateManager = wx.getUpdateManager()
      updateManager.onCheckForUpdate(function (res) {
        console.log('onCheckForUpdate====', res)
        // 请求完新版本信息的回调
        if (res.hasUpdate) {
          console.log('res.hasUpdate====')
          updateManager.onUpdateReady(function () {
            wx.showModal({
              title: '更新提示',
              content: '新版本已经准备好,是否重启应用?',
              success: function (res) {
                console.log('success====', res)
                // res: {errMsg: "showModal: ok", cancel: false, confirm: true}
                if (res.confirm) {
                  // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
                  updateManager.applyUpdate()
                }
              }
            })
          })
          updateManager.onUpdateFailed(function () {
            // 新的版本下载失败
            wx.showModal({
              title: '已经有新版本了哟~',
              content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~'
            })
          })
        }
      })
    }
  }

知识点4: 小程序重新初始化时会触发onLaunch事件. onLaunch事件会触发在页面onShow事件之前.获取小程序更新版本可以写在onLaunch里.

知识点5:
在开发和体验版无法测试版本更新
需要在开发者工具里,编译时选择"模拟更新编译"
在这里插入图片描述
(部分开发者工具版本,每次update编译时都需要重新勾选此选项)

点击确定,重新编译
页面会弹框显示
在这里插入图片描述
点击确认后:
在这里插入图片描述
知识点6:随着小程序的不断更新,部分功能可能需要最新版的微信客户端才能使用,这时候可以弹窗提示用户更新到最新版本微信。

 if (wx.canIUse('getUpdateManager')) {
  ...
} else {
  // can't use getUpdateManager
  wx.showModal({
        title: '提示',
        content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
   })

完整代码:

//app.js
App({
  onLaunch: function () {//监听小程序初始化
    // 展示本地存储能力
    wx.setStorageSync('first_enter', true)
    //处理小程序更新
    this.autoUpdate()
  },
  /***
   * 小程序更新机制处理
   */
  autoUpdate(){
    let that = this
    //获取小程序更新机制兼容
    if(wx.canIUse('getUpdateManager')){
      //获取全局唯一的版本更新管理器,用于管理小程序更新
      let updateManager = wx.getUpdateManager()
      //1.检查小程序是否有新版本发布
      updateManager.onCheckForUpdate(function(res){
        //请求完新版本信息的回调
        if(res.hasUpdate){
          //2.小程序有新版本,则静默下载新版本,做好更新准备
          updateManager.onUpdateReady(function(){
            wx.showModal({
              title: '更新提示',
              content: '新版本已经准备好,是否重启应用?',
              success: function(res) {
                if(res.confirm){
                  //3.新的版本已经下载好,调用 applyUpdate 应用新版本并重启
                  updateManager.applyUpdate()
                }else if(res.cancel){
                  //如果需要强制更新,则给出二次弹窗;如果不需要,则这里的代码都可以删除
                  wx.showModal({
                    title: '温馨提示~',
                    content: '本次版本更新涉及到新的功能添加,旧版本无法正常访问哦',
                    success: function(resc) {
                      that.autoUpdate()
                      return
                      //第二次提示后,强制更新
                      if(resc.confirm){
                          //新的版本已经下载好,调用 applyUpdate 应用新版本并重启
                          updateManager.applyUpdate()
                      }else if(resc.cancek){
                        //重新回到版本更新提示
                        that.autoUpdate()
                      }
                    }
                  })
                }
              }
            })
          })
          updateManager.onUpdateFailed(function(){
            //新的版本下载失败
            wx.showModal({
              title: '已经有新版本了哟~',
              content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~',
            })
          })
        }
      })
    }else{
      //如果希望用户在最新版本的客户端上体验您的小程序,可以这样提示
      wx.showModal({
        title: '提示',
        content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试',
      })
    }  
  }
})

知识点7: 如果在onLaunch里进行请求, 这是异步请求. 如果对交互顺序有要求, 如: 版本更新–重新获取数据-- 用户展示, 那么需要考虑在callback里进行重获数据.

知识点8:
小程序启动时,正常是会热更新,下载新版本的包,下一次启动就会使用新包。但发现有更新不成功的情况发生.

官方回答: 策略生效跟网络环境以及发布时间等若干因素有关,会尽可能让小程序快地更新,但无法保证每次都热更新成功。

知识点9:
小程序的异步更新发生在冷启动过程. 官方不建议热更新. 原因:
在这里插入图片描述
参考资料:https://www.cnblogs.com/sjw-dmwz/p/11576653.html

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值