uniapp 热更新

onLoad() {
	this.getAppVersion(); //获取版本号
},
methods:{
	getAppVersion() { //热更新(获取本机版本号)
		let self = this
		// self.getHttpVersion('1.0.0'); //热更新(获取线上版本号)
		// #ifdef APP-PLUS-NVUE || APP-NVUE || APP-PLUS
		plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
			let appVersion = wgtinfo.version;
			self.getHttpVersion(appVersion); //热更新(获取线上版本号)
		})
		// #endif
	},
	getHttpVersion(appVersionNumber) { //热更新(获取线上版本号)
		let self = this;
			$tools.axiosFrom('GET', '', {}).then(res => {
				// console.log(,'热更新(获取线上版本号)',res)
				if (res.code==0&&res.data) {
					let apkurl = ''; //安装包地址
					let versionNumber = ''; //设备版本号
					let isForce = 0; //是否开启强更新
					let strideVersion = ''; //强更新跨越版本
					if (uni.getSystemInfoSync().platform=='ios') { //苹果
						if(res.data.ios_list&&res.data.ios_list.version_number&&res.data.ios_list.version_url) {
							versionNumber = res.data.ios_list.version_number; //设备版本号
							apkurl = res.data.ios_list.version_url; //地址
							isForce = res.data.ios_list.is_force||0;//强更新状态
							strideVersion = parseInt(res.data.ios_list.stride_version||0);//强更新跨越版本
						}
					} else if(uni.getSystemInfoSync().platform=='android') { //安卓
						if(res.data.android_list&&res.data.android_list.version_number&&res.data.android_list.version_url) {
							versionNumber = res.data.android_list.version_number; //设备版本号
							apkurl = res.data.android_list.version_url; //地址
							isForce = res.data.android_list.is_force||0;//强更新状态
							strideVersion = parseInt(res.data.android_list.stride_version||0);//强更新跨越版本
						}
					}
					// console.log(parseInt(versionNumber.split('.').join("")),parseInt(appVersionNumber.split('.').join("")),apkurl)
					if (apkurl && versionNumber) {
						let versionNumbeA = parseInt(versionNumber.split('.').join(""));
						let appVersionNumbeA = parseInt(appVersionNumber.split('.').join(""));
						// console.log('[demo]',versionNumbeA,appVersionNumbeA,strideVersion)
						if (versionNumbeA > appVersionNumbeA) {
							if((versionNumbeA-appVersionNumbeA)>strideVersion) {
								isForce=1;
							}
							if(isForce==1&&uni.getSystemInfoSync().platform=='ios') {//强更新苹果
								this.iosForceUpdate();//苹果强制更新
								return false;
							} else {
								let obj = {
									hotUpdateApkurl:apkurl,//线上下载地址
									hotUpdateVersionNumber:versionNumber,//线上版本号
									hotUpdateAppVersion:appVersionNumber,//本地版本号
									isForce:isForce,//强更新状态
								}
							}
						}
					}
				}
			})
		},
		iosForceUpdate() {//苹果强制更新
			uni.showModal({
				title: '新版本更新',
				content: '点击确定前往应用市场下载最新版本。',
				showCancel:false,
				success: (res) => {
					if (res.confirm) {
						let appUrl = 'itms-apps://itunes.apple.com/cn/app/XXX?mt=8';// XXXX为对应的AppID
						plus.runtime.openURL(appUrl);
					} else if (res.cancel) {
						
					}
					this.iosForceUpdate();//重新打开
				}
			});
		},
		startUpdate() {//开始热更新
			let self = this;
			this.progreShow=true;//显示开启下载
			let apkurl = this.versionInfo.hotUpdateApkurl;//线上下载地址
			this.downloadTask = uni.downloadFile({ //执行下载
				url: apkurl, //下载地址
				success: (downloadResult) => {
					console.log('[下载成功]',downloadResult);
					if (downloadResult.statusCode == 200) {
						self.succesDownRuntim(downloadResult.tempFilePath);//前往安装
					}
				},
				fail: (err) => {
					uni.showToast({ title:'下载已终止',icon:'none' })
				}
			})
			this.downloadTask.onProgressUpdate((res) => {
				this.progrePercentage = res.progress;//下载进度
				this.progreTotalBytesWritten = parseFloat((Math.abs(res.totalBytesWritten/1024/1024)||0).toFixed(2));//已经下载的数据长度
				this.progreTotalBytesExpectedToWrite = parseFloat((Math.abs(res.totalBytesExpectedToWrite/1024/1024)||0).toFixed(2));//预期需要下载的数据总长度
			});
		},
		succesDownRuntim(tempFilePath) {//前往安装
			// console.log('[前往安装]',tempFilePath);
			plus.runtime.install(
				tempFilePath,
				{force: true},
				function(rertrrtt) {
					// console.log('[前往安装]',tempFilePath.split('.') && tempFilePath.split('.')[tempFilePath.split('.').length -1]);
					if (tempFilePath && tempFilePath.split('.') && tempFilePath.split('.')[tempFilePath.split('.').length -1] == 'wgt') { //wgt包
						setTimeout(() => {
							plus.runtime.restart();
						},500)
					}
				},
			)
		},
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值