当前位置: 首页 > news >正文

封装 UpdateManager 实现启动微信小程序时自动强制更新

背景

微信小程序发布新版本后,微信有自己的更新策略:异步更新、同步更新。异步更新会在用户下次冷启动时才会加载新版本,本次打开的仍然是旧版本。为了保证更多用户能够访问的新版本,本文利用微信wx.getUpdateManager()暴露的UpdateManager封装实现启动微信小程序时自动强制更新。

代码

微信提供了两个钩子暴露小程序更新事件:

  • UpdateManager.onCheckForUpdate监听向微信后台请求检查更新结果事件。微信在小程序每次启动(包括热启动)时自动检查更新,不需由开发者主动触发。可以不进行监听,会自动触发一次,当然可以监听来进行埋点,hasUpdate字段 true则代表有新版本。

  • UpdateManager.onUpdateReady这个必须提前监听,暴露的是客户端主动触发下载后(无需开发者触发),下载成功后回调。通过监听新版本下载成功,才能执行UpdateManager.applyUpdate() 强制小程序重启并使用新版本。

class UpdateManager {constructor() {this.updateManager = wx.getUpdateManager();this.getPromise();this.init();}init() {this.updateManager.onCheckForUpdate((res) => {if (res && res.hasUpdate) {// this.updateManager.onUpdateReady(() => {//   this.resolve();// });}});this.updateManager.onUpdateReady(() => {this.resolve();});this.updateManager.onUpdateFailed(function () {// 新版本下载失败});}getPromise() {this.promise = new Promise((resolve) => {this.resolve = resolve;});}applyUpdate() {this.promise.then(() => {wx.showModal({title: "更新提示",content: "新版本已经准备好,是否重启应用?",success: (res) => {if (res.confirm) {this.updateManager.applyUpdate();}},});});}
}module.exports = {UpdateManager,
};
const { UpdateManager } = require('./updateManager');App({onLaunch() {const wxUpdateManager = new UpdateManager();// 可以在此处设置特定条件,满足后再执行强制更新wxUpdateManager.applyUpdate();}
})

总结

以上就是微信小程序如何使用户在使用旧版本的过程中,强制更新为新版本方法,通过封装 UpdateManager,并利用微信提供的钩子 onUpdateReady、onUpdateFailed 分别监听小程序新版本包下载成功和失败,下载成功后执行 applyUpdate 达到强制更新。

相关文章:

  • Python | 一文搞定列表推导式
  • 微信小程序源码-基于Java后端的小区租拼车管理信息系统毕业设计(附源码+演示录像+LW)
  • web学习笔记(五十六)
  • windows 7 10 11快捷键到启动页面
  • 对systemverilog/verilog中forever语法的理解
  • 【实战JVM】-基础篇-03-Java内存结构
  • mybatis 注解式 XML式 通用mapper(tk-mybatis)使用
  • Spring AOP源码分析
  • 基于MetaGPT构建LLM多智能体
  • c++ using 关键字
  • React 路由5版本的使用详解(基于Class类版本的使用react-router-dom@5)
  • 【编译原理复习笔记】中间语言
  • RK 11.0 多屏模式下修改鼠标进入方式
  • Web3 知识体系架构图
  • Shell编程规范与变量
  • 3.7、@ResponseBody 和 @RestController
  • Brief introduction of how to 'Call, Apply and Bind'
  • C# 免费离线人脸识别 2.0 Demo
  • Hibernate最全面试题
  • HomeBrew常规使用教程
  • HTML中设置input等文本框为不可操作
  • HTTP那些事
  • in typeof instanceof ===这些运算符有什么作用
  • input的行数自动增减
  • javascript 哈希表
  • Java超时控制的实现
  • Java新版本的开发已正式进入轨道,版本号18.3
  • java正则表式的使用
  • leetcode388. Longest Absolute File Path
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • maya建模与骨骼动画快速实现人工鱼
  • PhantomJS 安装
  • 百度小程序遇到的问题
  • 动态魔术使用DBMS_SQL
  • 记录:CentOS7.2配置LNMP环境记录
  • 记一次用 NodeJs 实现模拟登录的思路
  • 来,膜拜下android roadmap,强大的执行力
  • 面试遇到的一些题
  • 首页查询功能的一次实现过程
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • # 数论-逆元
  • #传输# #传输数据判断#
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (二十六)Java 数据结构
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)Google的Objective-C编码规范
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (转载)(官方)UE4--图像编程----着色器开发
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET BackgroundWorker
  • .NET 使用 XPath 来读写 XML 文件