微信小程序发布新版本时自动提示用户更新的方法


Posted in Javascript onJune 07, 2019

如图,当小程序发布新的版本后,用户如果之前访问过该小程序,通过已打开的小程序进入(未手动删除),则会弹出这个提示,提醒用户更新新的版本。用户点击确定就可以自动重启更新,点击取消则关闭弹窗,不再更新。

微信小程序发布新版本时自动提示用户更新的方法

官方给的示例代码:

const updateManager = wx.getUpdateManager()

updateManager.onCheckForUpdate(function (res) {
 // 请求完新版本信息的回调
 console.log(res.hasUpdate)
})

updateManager.onUpdateReady(function () {
 wx.showModal({
  title: '更新提示',
  content: '新版本已经准备好,是否重启应用?',
  success(res) {
   if (res.confirm) {
    // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
    updateManager.applyUpdate()
   }
  }
 })
})

updateManager.onUpdateFailed(function () {
 // 新版本下载失败
})

官方提供的demo中,只有最基本的更新提示,并未做异常处理。而且官方也说了这个功能基础库 1.9.90 开始支持,低版本需做兼容处理,那么就需要对着端代码进行改进了。

另一方面,如果当前版本更新有重大调整,一定需要用户更新,那么可以在用户点击取消的回调中给出提示,并重新进入版本提示流程。如下图,在上边的更新提示中,用户点击取消,则弹出下面提示弹窗,用户点击确定,则更新版本,点击取消,则重新调用上边的更新提示。总之,用户只有更新了,才能正常访问小程序(如非必须,建议慎用)。

微信小程序发布新版本时自动提示用户更新的方法

改善后的代码:

//app.js

App({
 onLaunch: function(options) {
  this.autoUpdate()
 },
 autoUpdate:function(){
  console.log(new Date())
  var self=this
  // 获取小程序更新机制兼容
  if (wx.canIUse('getUpdateManager')) {
   const updateManager = wx.getUpdateManager()
   //1. 检查小程序是否有新版本发布
   updateManager.onCheckForUpdate(function (res) {
    // 请求完新版本信息的回调
    if (res.hasUpdate) {
     //2. 小程序有新版本,则静默下载新版本,做好更新准备
     updateManager.onUpdateReady(function () {
      console.log(new Date())
      wx.showModal({
       title: '更新提示',
       content: '新版本已经准备好,是否重启应用?',
       success: function (res) {
        if (res.confirm) {
         //3. 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
         updateManager.applyUpdate()
        } else if (res.cancel) {
         //如果需要强制更新,则给出二次弹窗,如果不需要,则这里的代码都可以删掉了
         wx.showModal({
          title: '温馨提示~',
          content: '本次版本更新涉及到新的功能添加,旧版本无法正常访问的哦~',
          success: function (res) {   
           self.autoUpdate()
           return;         
           //第二次提示后,强制更新           
           if (res.confirm) {
            // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
            updateManager.applyUpdate()
           } else if (res.cancel) {
            //重新回到版本更新提示
            self.autoUpdate()
           }
          }
         })
        }
       }
      })
     })
     updateManager.onUpdateFailed(function () {
      // 新的版本下载失败
      wx.showModal({
       title: '已经有新版本了哟~',
       content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~',
      })
     })
    }
   })
  } else {
   // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
   wx.showModal({
    title: '提示',
    content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
   })
  }
 }
})

更新版本的模拟测试:

1. 微信开发者工具上可以通过「编译模式」下的「下次编译模拟更新」开关来调试;

2. 小程序开发版/体验版没有「版本」概念,所以无法在开发版/体验版上测试更版本更新情况;

对于开发者工具,可以这样验证测试:

点击编译模式设置下拉列表,然后点击“添加编译模式”,在自定义编译条件弹窗界面,点击下次编译时模拟更新,然后点击确定,重新编译就OK了。

微信小程序发布新版本时自动提示用户更新的方法

微信小程序发布新版本时自动提示用户更新的方法

需要注意的是,这种方式模拟更新一次之后就失效了,后边再测试仍需要对这种编译模式进行重新设置才可以。

更新提示有延迟?

在开发者工具上测试验证的时候,更新提示弹窗在小程序界面加载出来五六秒之后才弹出来,这是由于小程序在检测到有新版本之后,调用UpdateManager.onUpdateReady(function callback)进行版本更新监听,此时客户端主动触发下载(无需开发者触发),下载成功后回调。也就是说我们上边的更新提示弹窗是在小程序检测到新版本并完成新版本下载之后弹出的,所以就有了这几秒的时间差。这样的话就很有必要进行再次改善了,至少应该在小程序编译时检测到有新版本就应该先给出更新提示,至于新版本下载的准备工作,可以在用户点击确认按钮之后进行,代码改造如下:

App({
 onLaunch: function(options) {
  this.autoUpdate()
 },
 autoUpdate: function() {
  var self = this
  // 获取小程序更新机制兼容
  if (wx.canIUse('getUpdateManager')) {
   const updateManager = wx.getUpdateManager()
   //1. 检查小程序是否有新版本发布
   updateManager.onCheckForUpdate(function(res) {
    // 请求完新版本信息的回调
    if (res.hasUpdate) {
     //检测到新版本,需要更新,给出提示
     wx.showModal({
      title: '更新提示',
      content: '检测到新版本,是否下载新版本并重启小程序?',
      success: function(res) {
       if (res.confirm) {
        //2. 用户确定下载更新小程序,小程序下载及更新静默进行
        self.downLoadAndUpdate(updateManager)
       } else if (res.cancel) {
        //用户点击取消按钮的处理,如果需要强制更新,则给出二次弹窗,如果不需要,则这里的代码都可以删掉了
        wx.showModal({
         title: '温馨提示~',
         content: '本次版本更新涉及到新的功能添加,旧版本无法正常访问的哦~',
         showCancel:false,//隐藏取消按钮
         confirmText:"确定更新",//只保留确定更新按钮
         success: function(res) {
          if (res.confirm) {
           //下载新版本,并重新应用
           self.downLoadAndUpdate(updateManager)
          }
         }
        })
       }
      }
     })
    }
   })
  } else {
   // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
   wx.showModal({
    title: '提示',
    content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
   })
  }
 },
 /**
  * 下载小程序新版本并重启应用
  */
 downLoadAndUpdate: function (updateManager){
  var self=this
  wx.showLoading();
  //静默下载更新小程序新版本
  updateManager.onUpdateReady(function () {
   wx.hideLoading()
   //新的版本已经下载好,调用 applyUpdate 应用新版本并重启
   updateManager.applyUpdate()
  })
  updateManager.onUpdateFailed(function () {
   // 新的版本下载失败
   wx.showModal({
    title: '已经有新版本了哟~',
    content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~',
   })
  })
 }
})

如上,在检测到小程序有新版本之后,就给出弹窗提示用户下载新版并重启小程序,用户点击确定按钮后进行小程序新版本的下载和更新。也为了调用方便,将新版本下载及小程序的重启应用单独封装起来。

这样,从小程序加载到弹出版本更新弹窗只需要耗费调用新版本检测API并返回结果的时间(开发者工具测试有2~3秒),虽说还是有一点延迟,但目前也只能这样了。

总结:

综上,无论如何,使用小程序版本更新检测功能都是需要一定时间的(一两秒的时间已经不算短了哈),如果在检测这一两秒中内用户进行了操作,那么更新提示弹窗则会打断用户的操作。但毕竟不是频繁更新版本,所以这方面还是可以接受的。

另外,下载新的版本包的时候建议loading,这样用户就知道是在下载,然后下载完成自动重启,这样整个流程就顺畅多了。

梳理了下,整了份思维导图,可以辅助理解:

微信小程序发布新版本时自动提示用户更新的方法

其他注意事项:

基础库最低版本设置:

如果不想做API支持判断,那么可以给小程序设置最低版本支持。

打开小程序管理后台-设置-基础库最低版本设置,根据现有小程序的访问情况或者小程序官方提供的数据,设置一个比较大众化的基础库版本就好了,这样就能进了尽量减少API兼容性判断,也能促使用户更新微信版本,以支持小程序正常运行,体验小程序一些高级功能。

微信小程序发布新版本时自动提示用户更新的方法

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
几种延迟加载JS代码的方法加快网页的访问速度
Oct 12 Javascript
javascript操作css属性
Dec 30 Javascript
jquery ajax跨域解决方法(json方式)
Feb 04 Javascript
使用phantomjs进行网页抓取的实现代码
Sep 29 Javascript
javascript变量声明实例分析
Apr 25 Javascript
《JavaScript函数式编程》读后感
Aug 07 Javascript
jQuery网页选项卡插件rTabs用法实例分析
Aug 26 Javascript
js实现仿京东2级菜单效果(带延时功能)
Aug 27 Javascript
jQuery基本过滤选择器用法示例
Sep 09 Javascript
socket.io学习教程之基础介绍(一)
Apr 29 Javascript
vue表单绑定实现多选框和下拉列表的实例
Aug 12 Javascript
vue 自定义右键样式的实例代码
Nov 06 Javascript
微信小程序与webview交互实现支付功能
Jun 07 #Javascript
在微信小程序中使用vant的方法
Jun 07 #Javascript
微信小程序实现折线图的示例代码
Jun 07 #Javascript
微信小程序如何刷新当前界面的实现方法
Jun 07 #Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
Jun 07 #Javascript
vue集成kindeditor富文本的实现示例代码
Jun 07 #Javascript
Vue使用Proxy监听所有接口状态的方法实现
Jun 07 #Javascript
You might like
php之对抗Web扫描器的脚本技巧
2008/10/01 PHP
PHP form 表单传参明细研究
2009/07/17 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
php提高网站效率的技巧
2015/09/29 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
详解Vue整合axios的实例代码
2017/06/21 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
Python+Opencv识别两张相似图片
2020/03/23 Python
Python使用dis模块把Python反编译为字节码的用法详解
2016/06/14 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
python使用Matplotlib画饼图
2018/09/25 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
python数据预处理方式 :数据降维
2020/02/24 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
新书发布会策划方案
2014/06/09 职场文书
十佳青年事迹材料
2014/08/21 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
法人授权委托书
2014/09/16 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
民主生活会主持词
2015/07/01 职场文书
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers