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

2023-11-01

  1. 如图,当小程序发布新的版本后,用户如果之前访问过该小程序,通过已打开的小程序进入(未手动删除),则会弹出这个提示,提醒用户更新新的版本。用户点击确定就可以自动重启更新,点击取消则关闭弹窗,不再更新。
    在这里插入图片描述
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 () {
  // 新版本下载失败
})
  1. 官方提供的demo中,只有最基本的更新提示,并未做异常处理。而且官方也说了这个功能基础库 1.9.90 开始支持,低版本需做兼容处理,那么就需要对着端代码进行改进了。

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

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. 更新版本的模拟测试:
    微信开发者工具上可以通过「编译模式」下的「下次编译模拟更新」开关来调试;
    小程序开发版/体验版没有「版本」概念,所以无法在开发版/体验版上测试更版本更新情况;
    对于开发者工具,可以这样验证测试:
    点击编译模式设置下拉列表,然后点击“添加编译模式”,在自定义编译条件弹窗界面,点击下次编译时模拟更新,然后点击确定,重新编译就OK了。

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

  1. 在开发者工具上测试验证的时候,更新提示弹窗在小程序界面加载出来五六秒之后才弹出来,这是由于小程序在检测到有新版本之后,调用 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秒),虽说还是有一点延迟,但目前也只能这样了。
5.总结:

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

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

梳理了下,整了份思维导图,可以辅助理解:
在这里插入图片描述
6.其他注意事项:

基础库最低版本设置:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序发布新版本后使用时自动提示用户更新或自动更新的方法 的相关文章

  • python数组的操作(访问)

    Python 自带的list print python自带的list集合 list1 list range 20 print list1 list2 list1 1 10 2 从开始下标1开始截取 下标到10结束 间隔2个 print li

随机推荐

  • 快速创建ES集群

    win10 中docker 设置 快速创建集群 访问 官网 elasticsearch docs reference setup install docker at main elastic elasticsearch GitHub 负责上
  • 上海控安成功举办普陀区科普创新专项智能网联车学术活动

    12月25日 由上海控安主办的上海市普陀区科普创新专项 智能网联汽车不神秘 学术交流活动顺利举办 活动现场座无虚席 齐聚汽车从业人员 汽车爱好者 青年学生近百人 共同探究未来汽车产业的变革 普陀区科委相关代表列席活动 上海工程技术大学电子电
  • Python学习基础系列----了解python

    了解python 1 了解Python Python是一种解释型 这意味着开发过程中没有了编译这个环节 面向对象 支持面向对象的风格或代码封装在对象的编程技术 动态数据类型的交互式 可在命令行中通过Python提示符及直接代码执行程序 高级
  • MATLAB 正则表达式

    MATLAB 正则表达式 文章目录 MATLAB 正则表达式 与正则表达式相关的函数 regexp 用法 输出类型 如何构建 exp 元字符 字符转义 重复限定符 重复限定符的三种模式 分组运算符 锚点 选项 option 例子 与正则表达
  • JS求数组中最大值

    法一 function getArrMax arr var max arr 0 for var i 1 i lt arr length i if arr i gt max max arr i return max getArrMax 1 2
  • angular总结-my

    angular知识点 1 Component 装饰器 这表明它下面的类是一个组件 它提供了有关该组件的元数据 包括它的模板 样式和选择器 在 Component 的元数据中指定的样式只会对该组件的模板生效 2 Angular 只会绑定到组件
  • sideload刷机

    官方Recovery自带了sideload刷机选项 方便了手机出故障的机友自行恢复 转载请标明出处IUNI官方论坛 bbs iunios com http bbs iunios com thread 28244 1 1 html 一 刷前准
  • [Python图像处理] 二十四.图像特效处理之毛玻璃、浮雕和油漆特效

    该系列文章是讲解Python OpenCV图像处理知识 前期主要讲解图像入门 OpenCV基础用法 中期讲解图像处理的各种算法 包括图像锐化算子 图像增强技术 图像分割等 后期结合深度学习研究图像识别 图像分类应用 希望文章对您有所帮助 如
  • Python Web系列学习3-Tornado

    1 Tornado常被用作大型站点的接口服务框架 协程是Tornado推荐的编程方式 Tornado集成了丰富的用户身份验证功能 2 同步I O可以理解为被调用的I O函数会阻塞调用函数的执行 而异步I O则不会 tornado httpc
  • 【python爬虫】js逆向分析及AES解密

    一 原理简述 1 首先查看需要获取的数据即热门评论是否在源代码中 如果在源代码中就可以直接xpath等方式进行抓取 2 但是发现在网页和框架源代码里面都无法搜到评论内容 此时 使用网络抓包工具即 查看network中的XHD 在js代码中
  • vue2 vue3父子组件传参

    vue3 父子组件传参 父组件
  • Chatgpt私有化部署(全流程)

    前言 当下使用chatgpt来帮助完成工作已然成为主流 但想访问必须先面对地区的封锁 所以使用openai官方提供的API来部署至本地服务器从而更加便利的使用chatgpt 本文章主要介绍如何部署私有聊天机器人 条件准备 公网服务器一台 可
  • Unity 屏幕坐标鼠位置 Input.mousePosition 转为UI物体的坐标

    方式一 使用 RectTransformUtility ScreenPointToLocalPointInRectangle
  • [1158]微信小程序字段配置

    文章目录 微信小程序之permission字段 微信开发者工具 project config json配置详情 项目配置文件 一级字段 compileType setting useCompilerPlugins babelSetting
  • django连接mysql数据库报错_Django 连接 MySQL 数据库及常见报错解决

    Django 连接 MySQL数据库及常见报错解决 MySQL 的安装以及设置远程访问权限 不属于本笔记的重点 此处不做多余赘述 前提 MySQL 安装成功 且已配置远程访问权限 如在本地测试的忽略此项 终端或者数据库管理工具连接 MySQ
  • pyinstaller打包 .py 文件为可执行的 .exe程序

    有疑问的地方 参考博文 一 环境搭建 Python GUI图形化小工具编程学习 PySide2 环境搭建 一 二 实例演示 Python GUI图形化小工具编程学习 Demo 实例演示 二 三 打包失败 pyinstall 打包 exe 文
  • 利用huggingface-transformers进行命名实体识别

    利用huggingface transformers进行命名实体识别 项目地址 https github com huggingface transformers 文档地址 https huggingface co docs transfo
  • linux /home recovering journal,启动Ubuntu时出现 /dev/sda2 clean 和 /dev/sda2 recovering journal 现象的解决办法...

    最近在Ubuntu 18 4上安装Nvidia显卡后 显卡似乎总是不能完全兼容 第一次出现问题时 是登录账号后 发现系统采用了默认显卡驱动 而已装过的显卡驱动则有损坏导致无法使用 第二次出现问题时 则是在开机启动后 界面出现了 dev sd
  • 总结一下m3u8格式相关问题

    1 m3u8格式解读 本小节摘自 m3u8视频文件详解 m3u8不是一种视频格式 而是一种纯文本文件 m3u8视频文件格式中 存放了视频的基本信息 和 分段视频的索引地址 将一整个视频分成了时长不同的很多小段 当播放m3u8视频时 就是按顺
  • 微信小程序发布新版本后使用时自动提示用户更新或自动更新的方法

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