赞
踩
在小程序的日常迭代中,有一些场景我们可能需要在小程序发布后,用户能够马上感知并更新,比如上线新活动、修复高危漏洞等,如果用户因为各种原因未能及时更新小程序,这就可能导致一些功能无法正常使用或者存在安全隐患,因此,实现小程序的强制更新功能就显得尤为重要。本文将探讨小程序如何做到强制更新,以确保用户始终使用最新、最安全的小程序版本。
在这之前,我们得先来了解一下小程序的生命周期,从启动到销毁它都是如何进行的
广义的小程序启动可以分为两种情况,一种是冷启动,一种是热启动。
从小程序生命周期的角度来看,我们一般讲的「启动」专指冷启动,热启动一般被称为后台切前台。
切后台的方式包括但不限于以下几种:
小程序进入「后台」状态一段时间后(目前是 5 秒),微信会停止小程序 JS 线程的执行,小程序进入「挂起」状态。此时小程序的内存状态会被保留,但开发者代码执行会停止,事件和接口回调会在小程序再次进入「前台」时触发。
当开发者使用了后台音乐播放、后台地理位置等能力时,小程序可以在 「后台」 持续运行,不会进入到 「挂起」 状态
当小程序进入后台或被挂起时,它并不会一直保留在后台,当满足以下两点时,小程序会被销毁
小程序默认的更新机制可以分为两类:启动时同步更新、启动时异步更新
在以下情况下,小程序启动时会同步更新代码包。同步更新会阻塞小程序的启动流程,影响小程序的启动耗时。
在启动时异步更新的情况下,如果开发者希望立刻进行版本更新,可以使用 wx.getUpdateManager
API 进行处理,该API会返回一个UpdateManager
实例
UpdateManager
对象为小程序提供了四种关键的方法,用于管理和监控小程序的更新过程。
UpdateManager.applyUpdate()
:在小程序新版本已经下载完成的情况下(即接收到 onUpdateReady
回调后),此方法用于强制小程序重启并启用新版本。UpdateManager.onCheckForUpdate(function callback)
:此方法用于监听向微信后台发起的更新检查结果事件。微信小程序在冷启动时会自动进行更新检查,开发者无需主动触发。UpdateManager.onUpdateReady(function callback)
:此方法用于监听小程序的新版本更新就绪事件。一旦新版本可用,客户端会自动触发下载过程(无需开发者额外操作),并在下载成功后调用此回调函数。UpdateManager.onUpdateFailed(function callback)
:此方法用于监听小程序更新失败的事件。当小程序有新版本且客户端尝试自动下载更新时(同样无需开发者干预),如果因网络问题或其他原因导致下载失败,将会触发此回调函数。根据以上API,我们就能够在小程序法版后,通知用户进行强制更新
if (taro.canIUse('getUpdateManager')) { const updateManager = taro.getUpdateManager(); updateManager.onCheckForUpdate(function (res) { console.log('onCheckForUpdate====', res); if (res.hasUpdate) { // 小程序已更新 updateManager.onUpdateReady(function () { taro.showModal({ title: '更新提示', showCancel: false, confirmText: '立即重启', content: '新版本已经上线,是否重启小程序以应用新版本?', success: function (res) { if (res.confirm) { // 调用 applyUpdate 应用新版本并重启 updateManager.applyUpdate(); } } }); }); // 更新失败 updateManager.onUpdateFailed(function () { taro.showModal({ title: '更新失败', content: '新版本下载失败,请删除当前小程序后重新打开。', }); }); } }); } else { // 版本过低 taro.showModal({ title: '提示', content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。', }); }
因为小程序的开发版和体验版没有版本的概念,所以无法在开发版和体验版上测试更版本更新情况,但可以通过微信开发者工具 => 添加编译模式 => 编译设置 => 下次编译时模拟更新来进行调试
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。