uniapp 开发的app检测版本实现自动下载更新(展示下载进度)

目录

    • 前言
    • 检测是安卓还是ios
    • 版本号对比
    • 直接调用默认浏览器打开下载地址的方法
    • 完整检测更新和下载文件代码
    • data部分

前言

组件库环境:uview 1x

检测是安卓还是ios

首先在onload中检测是安卓还是ios,ios的话 要做啥操作另外修改一下,这里主要是针对apk的更新

onLoad() {
	//检测更新
	const type = uni.getSystemInfoSync().platform
	console.log(type, '机型')
	type == 'ios' ? '' : this.checkUpdates()
},

版本号对比

然后就是检测版本是否是最新,这里我说一下 plus.runtime.version 这玩意 在h5中不起作用,可以去看看官网的解释,在h5中需要使用下面代码块包裹下,不然报错

// #ifdef APP-PLUS
// #endif

然后就是他获取到的版本就是manifest.json
文件中配置的版本信息(13.x.13)中间那一位,下边做了一个截取拿到的就是 打包发布配置的那一个版本号,对比版本号的时候需要一个接口,返回最新的版本号码,跟当前环境获取到的plus.runtime.version版本信息比较,一致的话就不用更新
uniapp 开发的app检测版本实现自动下载更新(展示下载进度)_第1张图片
我这接口返回的值,就用到最新apk下载地址和版本号,版本号要和你manifest.json文件中写的一致
uniapp 开发的app检测版本实现自动下载更新(展示下载进度)_第2张图片

直接调用默认浏览器打开下载地址的方法

plus.runtime.openURL('下载url')

downloadNum 这玩意是下载进度条的数量,页面展示进度条的代码(uview 版本 1x)
showdownLine这玩意是控制是否显示下载进度条,只有点了更新之后才会显示进度条

完整检测更新和下载文件代码

<view class="progress" v-if="showdownLine">
	<u-line-progress :striped="true" :percent="downloadNum" :striped-active="true"></u-line-progress>
</view>
checkUpdates() {
	//调用接口检查是否可以更新
	// #ifdef APP-PLUS
	const localVersion = plus.runtime.version.split('.')[1]
	console.log(localVersion)
	this.$u.get(`/api-sys/sys/sysVersion/getVersion`, {}).then(res => {
		console.log(res);
		if (res.code == 200) {
			const {
				version,
				androidUrl,
				updateContent
			} = res.data
			if (localVersion == version) {
				console.log('不需要更新')
			} else {
				uni.showModal({ //提醒用户更新  
					title: "更新提示",
					content: '是否更新',
					success: (res) => {
						if (res.confirm) {
							this.doUpData(androidUrl)
							this.showdownLine = true
							// plus.runtime.openURL(androidUrl)

						}
					}
				})
			}
		} else {
			this.$u.toast(res.msg)
		}
	});
	// #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();
		// }
	});
},

data部分

data() {
	return {
		downloadNum: null,
		showdownLine: false,
		}
},

你可能感兴趣的:(Vue,前端)