欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

uniapp版本更新 热更新及自然更新

程序员文章站 2024-01-22 11:23:46
...

哈哈哈 今天来记录下uniapp的更新版本方式

首先分为热更新和自然更新

1.热更新是指强制更新 就是必须更新 当系统出现bug时 或者有新增功能影响使用时 使用热更新
2.自然更新则是 可以选择的更新 点击下载按钮则下载 点击取消则放弃更新

uniapp版本更新 热更新及自然更新

uniapp版本更新 热更新及自然更新

好啦 接下来上代码吧

  1. 在App.vue页面
    可以卸载onLaunch里面 也可以卸载methods中然后在onLaunch调用 我用的是后一种方法
methods: {
		...mapMutations(['login']),//这里不需要的可注释掉
			
		/**
		 * 安卓应用的检测更新实现
		 */
		AndroidCheckUpdate: function() {
			var _this = this;
			var version  = 101;
			// console.log(version);
			uni.request({
				//请求地址,设置为自己的服务器链接
				// url: '*************/index.php/System/version', //这是完整域名
				// 也可以将域名写在仓库里面 然后这里面调用 以防换域名的时候来回更改
				url: _this.baseUrl +'index.php/System/version', 
				method: 'POST',
				data: {},
				success: resMz => {
					console.log("版本号信息",resMz.data);
					//返回的版本号
					var server_version = resMz.data.data.version;
					//返回的时间戳 
					var currTimeStamp = resMz.data.data.timestamp;
					//返回的状态码 0 是自然更新 1是强制更新
					var status = resMz.data.data.update_status;
					console.log("本地版本号version= "+ version + ",更新码="+status + ",后台版本号="+server_version+ ",时间戳"+ currTimeStamp);
					if (status == 1) {
						//强制更新 又称为热更新  系统出现大bug 必须更新
						_this.MustcheckVersionToLoadUpdate(server_version,version);
					} else if (status == 0) {
						//自然更新
						uni.getStorage({
							key: 'tip_version_update_time',
							success: function(res) {
								var lastTimeStamp = res.data;
								var tipTimeLength = 0;
								console.log( "时间间隔",tipTimeLength);
								let cha = lastTimeStamp + tipTimeLength - currTimeStamp;
								console.log("本地时间戳=",lastTimeStamp);
								console.log("时间戳差值",cha);
								if (lastTimeStamp + tipTimeLength > currTimeStamp) {
									//这里不用理会
									console.log('当后台时间戳大于本地时间戳才会进入');
								} else {
									console.log('立即更新');
									//重新设置时间戳
									_this.setStorageForAppVersion(currTimeStamp);
									//进行版本型号的比对 以及下载更新请求
									console.log(server_version, version);
									_this.checkVersionToLoadUpdate(server_version, version);
									
								}
							},
							fail: function(res) {
								_this.setStorageForAppVersion(currTimeStamp);
							}
						});
					}
				},
				fail: () => {},
				complete: () => {}
			});
		},
		/**
		 * //设置应用版本号对应的缓存信息
		 * @param {Object} currTimeStamp 当前获取的时间戳
		 */
		setStorageForAppVersion: function(currTimeStamp) {
			uni.setStorage({
				key: 'tip_version_update_time',
				data: currTimeStamp,
				success: function() {
					console.log('setStorage-success');
				}
			});
		},
		/**
		 * 进行版本型号的比对 以及下载更新请求 自然更新
		 * @param {Object} server_version 服务器最新 应用版本号
		 * @param {Object} curr_version 当前应用版本号
		 */
		checkVersionToLoadUpdate: function(server_version, curr_version) {
			if (server_version > curr_version) {
				uni.showModal({
					title: '版本更新',
					content: '有新的版本发布,是否立即进行新版本下载?',
					confirmText: '立即更新',
					cancelText: '取消',
					success: function(res) {
						if (res.confirm) {
							uni.showToast({
								icon: 'none',
								mask: true,
								title: '有新的版本发布,程序已启动自动更新。',
								duration: 5000
							});
							//设置 最新版本apk的下载链接 这是固定的 每次把包放在这个链接里里面即可 由后端制作
							var downloadApkUrl = 'http://zons.oss-cn-shenzhen.aliyuncs.com/upload/20200616/20200616/159228906014ee22eaba297944c96afdbe5b16c65b.apk';
							console.log(downloadApkUrl);
							plus.runtime.openURL(downloadApkUrl);
						} else if (res.cancel) {
							console.log('下次一定');
							
						}
					}
				});
			}
		},
		/**
		 * 进行版本型号的比对 以及下载更新请求 自然更新
		 * @param {Object} server_version 服务器最新 应用版本号
		 * @param {Object} curr_version 当前应用版本号
		 */
		MustcheckVersionToLoadUpdate: function(server_version, curr_version) {
			if (server_version > curr_version) {
				uni.showModal({
					title: '版本更新',
					content: '有新的版本发布,检测到您当前为Wifi连接,是否立即进行新版本下载?',
					confirmText: '立即更新',
					showCancel:false,
					success: function(res) {
						if (res.confirm) {
							uni.showToast({
								icon: 'none',
								mask: true,
								title: '有新的版本发布,程序已启动自动更新。',
								duration: 5000
							});
							//设置 最新版本apk的下载链接 这是固定的
							var downloadApkUrl = 'http://zons.oss-cn-shenzhen.aliyuncs.com/upload/20200616/20200616/159228906014ee22eaba297944c96afdbe5b16c65b.apk';
							console.log(downloadApkUrl);
							plus.runtime.openURL(downloadApkUrl);
						}
					}
				});
			}
		},
onLaunch: function() {
		this.AndroidCheckUpdate();
}

另外参考了一个大神的内容 下面附上链接哦
https://www.jianshu.com/p/541c286f69ea

相关标签: uniapp