uniapp 微信小程序:更新

小程序运行机制 - 小程序启动

  1. 冷启动:如果用户首次打开,或小程序销毁后被用户再次打开,此时小程序需要重新加载启动,即冷启动。
  2. 热启动:如果用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时小程序并未被销毁,只是从后台状态进入前台状态,这个过程就是热启动。

小程序更新机制

  1. 启动时同步更新
    1.1. 定期检查发现版本更新:微信运行时,会定期检查最近使用的小程序是否有更新。如果有,下次启动打开新版。
    1.2. 用户长时间未使用小程序:会强制同步检查版本更新。(下载新版失败,还是会用本地旧版)
  2. 启动时异步更新
    2.1. 小程序每次冷启动时,都会异步检查是否有更新版本。如果发现有新版本,将会异步下载新版本的代码包。但当次启动仍会使用客户端本地的旧版本代码,即新版本的小程序需要等下一次冷启动才会使用。

所以我们要处理的是:热启动时检测更新,如果有就强制更新。在 onShow 生命周期中监听。

uni.getUpdateManager

const updateManager = uni.getUpdateManager();

export default {
    
    
	data() {
    
     return {
    
    };	},
	onShow: function() {
    
    
		// 当向小程序后台请求完新版本信息,会进行回调。res: {hasUpdate: true, version: 1.0.0}
		updateManager.onCheckForUpdate(function (res) {
    
    
			if (res.hasUpdate) {
    
    					 // 有更新
				uni.showLoading({
    
    title:'更新中...'}); // 开始下载前,显示Loading
			}
		});
		// 当新版本下载完成,会进行回调
		updateManager.onUpdateReady(function () {
    
    
			uni.hideLoading();   // 关闭 Loading 
			uni.showModal({
    
    		// 弹确认框(强制更新)
				title:'更新提示',
				content:'更新完毕,是否重启?',
				success:function (res) {
    
    
					if (res.confirm) {
    
    
						updateManager.applyUpdate(); // 强制小程序重启并使用新版本。
					}
				}
			})
		});
		// 当新版本下载失败,会进行回调
		updateManager.onUpdateFailed(function () {
    
    
			uni.hideLoading();	// 关闭 Loading 
			uni.showToast({
    
     title:'更新失败,稍后再试...', icon:"error" });
		});
	},
	methods: {
    
    	}
};

以上外码中使用 uni 如果直接是微信小程序项目换成 wx 即可。

开发环境调试

  1. 微信开发者工具上可以通过「编译模式」下的「下次编译模拟更新」开关来调试
  2. 小程序开发版/体验版没有「版本」概念,所以无法在开发版/体验版上测试更版本更新情况

参考资料

uni.getUpdateManager()

小程序运行机制
小程序更新机制
wx.getUpdateManager

猜你喜欢

转载自blog.csdn.net/jx520/article/details/131598529