封装 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 达到强制更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/16157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【综合分析题】同事共事

题目:在单位,甲同事自私,乙同事自卑,丙同事自负,你更愿意和哪个同事共事? 逐字稿: 各位考官好,在我看来,在单位和同事共事,其实是我们实践11大于2&#xff0…

leetcode LCR 076. 数组中的第 K 个最大元素

. - 力扣(LeetCode) 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k 2 输出: 5示例…

GEE26:批量导出逐日、逐月、逐季节和逐年的遥感影像(以NDVI为例)

影像导出 写在前面1.逐日数据导出2.逐月数据导出3.季节数据导出4.逐年数据导出 写在前面 最近很多小伙伴们私信我,问我如何高效导出遥感数据,从逐日到逐季度,我都有一套自己的方法,今天就来和大家分享一下!   &#…

人工智能原理第十四章课后习题答案仅供参考

14.1 叙述演绎推理、归纳推理、以及溯因推理的基本概念、内在联系。并讨论为什么说这三者是主要的推理模式 演绎推理是根据已知的一般性、真实性的前提,通过推理得出个别结论的推理方法,简而言之是从一般到特殊的推理。 归纳推理是以个别实例为前提,推导出一般性结论的推理形…

缓存归纳总结1

1. 何时需要考虑缓存一致性 缓存一致性主要在以下情况需要特别考虑: 读多写少场景:当数据读取操作远多于写入时,为了提高系统性能,通常会将数据缓存起来。但一旦数据源(如数据库)中的数据发生变化&#xf…

基于YOLOv8+PySide6的快递分类管理系统

1、背景 随着电子商务的飞速发展,快递行业所承受的数据处理需求愈发庞大。在这样的背景下,传统的手工分类方法已经显得力不从心,因其不仅耗时耗力,还存在着易出错的隐患。因此,迫切需要研发出一套高效而准确的自动化系…

多线程案例(线程池)

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:<计算坤是如何工作的>&#x1f649; &#x1f439;今日诗词:百年兴衰皆由人, 不由天&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&…

路径规划搜路算法有哪些?

路径规划搜索算法是帮助移动机器人或自动化系统在环境中从起点导航至终点的计算方法。以下是一些常见的路径规划搜索算法&#xff1a; Dijkstra算法&#xff1a;一种经典的最短路径搜索算法&#xff0c;适用于没有负权边的图。 A*算法&#xff1a;一种启发式搜索算法&#xff…

go 微服务框架kratos使用中间件的方法

一、中间件的概念 在go语言中&#xff0c;中间件是一种用于处理http请求的开发模式&#xff0c;允许开发人员在请求到达处理程序之前或之后执行特定的操作&#xff0c;如日志记录、身份验证、错误处理等。 中间件通常是一个函数&#xff0c;它接收一个 http.Handler 作为参数…

Ardupilot开源代码之Rover上路 - 后续4

Ardupilot开源代码之Rover上路 - 后续4 1. 源由2. 深度配置2.1 设置倒车按钮2.1.1 前进2.1.2 倒退 2.2 MP无法连接ESP82662.3 最小油门校准 3. 遗留&后续3.1 高精度编码器问题3.2 OV5647 720P30FPS 马赛克问题 4. 参考资料 1. 源由 开源项目最主要的问题就是所有配置是开放…

Python模块方法总结

一 模块简介 模块&#xff08;module&#xff09;和C语言中的头文件以及Java中的包很类似&#xff0c;在Python中用关键字import来引入某个模块&#xff0c;比如要引用模块math&#xff0c;就可以在文件最开始的地方用import math来引入。 import math#这样会报错 print sqrt…

信息安全从运维到运营:CISAW安全运维方向

随着数据中心规模扩大&#xff0c;安全运维内生需要逐渐向安全运营进化&#xff0c;统一安全理念&#xff0c;提高服务意识&#xff0c;提升专业能力。安全运营是对安全运维的继承式发展&#xff0c;而不是颠覆&#xff0c;意味着以业务发展为基础&#xff0c;以事件核查为线索…

【gradle】MAC下用gradle构建部署springboot项目

MAC下用gradle构建部署springboot项目 前言下载安装配置gradle下载安装下载可能出现的问题 &#xff08;zsh: command not found: brew&#xff09; 配置环境变量配置国内下载源全局配置单个项目配置 通过idea构建项目构建后的项目结构 小结延伸 前言 好久以前就听说gradle了&…

RAG概述(一):RAG架构的演进

目录 概述 RAG核心步骤 Indexing索引 Retrieval检索 Generation生成​​​​​​​ Native RAG Advanced RAG Modular RAG 参考 概述 RAG&#xff1a;Retrieval-Augmented Generation 检索增强生成。 RAG通过结合LLMs的内在知识和外部数据库的非参数化数据&#xff…

vue实现图片懒加载

在src中创建一个directives文件夹在里面创建一个lazy.js文件 在main.js中引入 import lazy from ./directives/lazy app.directive(lazy, lazy) 在app.vue中 <script setup lang"ts"> import { RouterLink, RouterView } from vue-router import HelloWorl…

与MySQL的初相遇

&#x1f30e;初识MySQL 注&#xff1a;本文SQL语句只为了验证猜想&#xff0c;不会也不要紧。 文章目录&#xff1a; MySql开端 认识数据库       什么是数据库       主流数据库       MySQL的本质 MySQL基础使用       连接mysql服务器     …

Linux内存管理--系列文章肆

一、引子 上篇文章介绍了目标文件&#xff0c;也就是讲到编译过程中的汇编这个阶段。本篇要讲目标文件怎么变成一个可执行文件的&#xff0c;介绍编译过程中的链接。 链接主要分为两种&#xff0c;静态链接和动态链接。它们本质上的区别&#xff0c;是在程序的编译和运行过程中…

自动化您的任务——crewAI 初学者教程

今天&#xff0c;我写这篇文章是为了分享您开始使用一个非常流行的多智能体框架所需了解的所有信息&#xff1a;crewAI。 我将在这里或那里跳过一些内容&#xff0c;使本教程成为一个精炼的教程&#xff0c;概述帮助您入门的关键概念和要点 今天&#xff0c;我写这篇文章是为了…

【代码随想录训练营】【Day 31】【回溯-5】| Leetcode 491, 46, 47

【代码随想录训练营】【Day 31】【回溯-5】| Leetcode 491, 46, 47 需强化知识点 排列问题和组合分割子集问题的区别&#xff1a; 排列是讲究顺序的&#xff0c;不同顺序的组合是不同的&#xff0c;因此不能使用startIndex来限制选择顺序&#xff0c;需要used来判断是否已被选…

easy-rule规则引擎使用

简介 轻量级的规则引擎&#xff0c;易于学习的api 简单来说&#xff0c;规则引擎就是一个函数&#xff1a;yf(x1,x2,…,xn) 将业务代码和业务规则分离&#xff0c;解耦业务决策和业务代码的绑定关系 入门示例 依赖引入 <dependency><groupId>org.jeasy</grou…