实现检测版本更新并下载新版本:通过后台返回更新版本的版本号和当前版本号做比较,不同则提示有新版本需要更新,下载地址又后台返回
代码:

		// 检测版本更新
		async checkUpdates() {
			// #ifdef APP-PLUS
			//调用接口获取后台版本信息,检查是否需要更新
			let versionInfo = await this.$api.login.getAppInfo();
			console.log('获取后台版本信息', versionInfo);
			// 待更新版本
			const currentVersion = versionInfo.versionName;
			console.log('后台需要更新版本', currentVersion);
			// 更新地址
			let androidUrl = versionInfo.url;
			// 是否强制更新 isMust 0.否 1.强制更新
			let showCancel = versionInfo.isMust ? true : false;
			//  比较版本是否不同 当前版本:plus.runtime.version
			const localVersion = plus.runtime.version.split('.');
			let current = currentVersion.split('.');
			// 默认是同一个版本,不需要更新
			let flag = false;
			current.forEach((item, i) => {
				if (item !== localVersion[i]) {
					// 检测到版本不同,需要更新
					flag = true;
				}
			});

			if (flag) {
				uni.showModal({
					// 更新提醒
					title: '发现新版本,是否更新',
					content: '待更新版本号:' + currentVersion ,
					// showCancel: showCancel,
					success: res => {
						if (res.confirm) {
							this.doUpData(androidUrl);
							this.showdownLine = true;
							// plus.runtime.openURL(androidUrl)
						} else if (res.cancel) {
							// 不更新强制退出app
							if (showCancel) {
								console.log('不更新强制退出app');
								plus.runtime.quit();
							}
						}
					}
				});
			} else {
				this.$myToast('无更新', 'none');
			}
			// #endif
		},
		doUpData(Url) {
			uni.showLoading({
				title: '更新中……'
			});
			const downloadTask = uni.downloadFile({
				//执行下载
				url: Url, //下载地址
				timeout: 1000 * 30, //30秒超时时间
				success: downloadResult => {
					//下载成功
					console.log(downloadResult);
					this.showdownLine = false;
					uni.hideLoading();
					if (downloadResult.statusCode == 200) {
						plus.runtime.install(
							//安装软件
							downloadResult.tempFilePath,
							{
								force: true
							},
							function(res) {
								plus.runtime.restart();
							}
						);
					}
				},
				fail: err => {
					uni.hideLoading();
					this.showdownLine = false;
					this.$u.toast(err.errMsg);
					console.log(err);
				},
				complete: com => {
					console.log(com);
				}
			});

			// 下载进度
			downloadTask.onProgressUpdate(res => {
				// this.$u.toast(res.progress)
				this.downloadNum = res.progress;
				// console.log('下载进度' + res.progress);
				// console.log('已经下载的数据长度' + res.totalBytesWritten);
				// console.log('预期需要下载的数据总长度' + res.totalBytesExpectedToWrite);

				// 满足测试条件,取消下载任务。
				// if (res.progress > 50) {
				// 	downloadTask.abort();
				// }
			});
		}

在这里插入图片描述
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐