uniapp检查更新并显示下载进度(2)

发布时间 2023-09-04 17:03:37作者: seekHelp

1、App.vue文件

<script>
import appUpdate from '@/util/appUpdate.js'


onLaunch: function() {
			uni.getSystemInfo({
				success: function(e) {
					// #ifdef APP-PLUS
					// 检测升级
					appUpdate()
					// #endif
                }
            }
}
</script>

2、appUpdate.js文件

//APP更新
import { http } from '@/common/service/service.js' 
export default function appUpdate() {
	uni.request({
		url: 'http://2.34.4.2/update/update.json', //检查更新的服务器地址
		data: {
			appid: plus.runtime.appid,
			version: plus.runtime.version,
			imei: plus.device.imei
		},
		success: (res) => {
			plus.runtime.getProperty(plus.runtime.appid, function(wgtinfo) {
				
				let client_version = wgtinfo.version
				
				// var flag_update = client_version.split(".").splice(0, 2).join(".") != JSON.parse(res.data.version).split(".").splice(0, 2)
				// 	.join(".")
				var flag_update = client_version.split(".").splice(0, 2).join(".") != res.data.version.split(".").splice(0, 2)
					.join(".")
				var flag_hot = (Number(client_version.split(".")[2]) < Number(res.data.version.split(".")[2])) & !flag_update
				console.log(res.data.version)
				console.log(client_version)
				console.log(flag_update)
				console.log(flag_hot)

				if (flag_update) {
					// 提醒用户更新
					uni.showModal({
						title: '更新提示',
						content: res.data.note,
						success: (showResult) => {
							if (showResult.confirm) {
								plus.nativeUI.toast("正在准备环境,请稍后!");
								var dtask = plus.downloader.createDownload(res.data.url, {
									method: 'GET',
									filename: '_doc/update/'
								}, function(d, status) {
									if (status == 200) {
										var path = d.filename; //下载apk
										plus.runtime.install(path); // 自动安装apk文件
									} else {
										plus.nativeUI.alert('版本更新失败:' + status);
									}
								});
								try {  //加载进度显示
									dtask.start(); // 开启下载的任务
									var prg = 0;
									var showLoading = plus.nativeUI.showWaiting("正在下载");  //创建一个showWaiting对象 
									dtask.addEventListener('statechanged', function(
									  task,
									  status
									) {
									  // 给下载任务设置一个监听 并根据状态  做操作
									  switch (task.state) {
										case 1:
										  showLoading.setTitle("正在下载");
										  break;
										case 2:
										  showLoading.setTitle("已连接到服务器");
										  break;
										case 3:
										  prg = parseInt(
											(parseFloat(task.downloadedSize) /
											  parseFloat(task.totalSize)) *
											  100
										  );
										  showLoading.setTitle("  正在下载" + prg + "%  ");
										  break;
										case 4:
										   plus.nativeUI.closeWaiting();
											//下载完成
										  break;
									  }
									});
								  } catch (err) {
									  plus.nativeUI.closeWaiting();
									  uni.showToast({
										title: '更新失败-03',
										mask: false,
										duration: 1500
									  });
								  }
								// dtask.start();
							}
						}
					})
				} else if (flag_hot) {
					uni.downloadFile({
						url: res.data.wgtUrl,
						success: (downloadResult) => {
							if (downloadResult.statusCode === 200) {
								// plus.nativeUI.toast(`正在热更新!${res.data.versionCode}`);
								plus.nativeUI.toast(`正在热更新!${res.data.version}`);
								plus.runtime.install(downloadResult.tempFilePath, {
									force: true
								}, function() {
									plus.nativeUI.toast("热更新成功");
									plus.runtime.restart();// 安装成功后重启 
								}, function(e) {
									console.log(e)
									plus.nativeUI.toast(`热更新失败:${e.message}`);
								});
							}
						},
						fail: (err) => {
							console.log('下载失败', err)
						}
					});
				}

			});
		}
	})
}