uni-app实现app展示进度条在线更新以及定时更新提醒

需求:需要在app启动后进行检查更新,如果有更新就提示更新,可以点击确定更新或者暂时不更新,如果不更新,就将当前的时间进行缓存,并且再次进入时进行对比,只要超过一天时间就继续提醒检查更新

第一步获取缓存时间,如果有就获取当前时间进行对比

	const saveDtime = uni.getStorageSync('saveVersionDay')
		//判断当前的时间大于检查更新时间
		if (saveDtime) {
			const currentDay = dateCurrentDayTime()
			if (Number(currentDay) > Number(saveDtime)) this.updatevVersion()
		} else {
			this.updatevVersion()
		}
  1. 假设当有缓存时间就去检查更新,就执行updatevVersion操作
  2. 确认有更新就可以点击更新或者稍后更新

//检查版本

	async updatevVersion() {
		const apkName = '*****.apk'
		//获取当前是否有更新
		let res = await queryNewVersion({
			fileName: apkName
		})
		const _this = this
		//如果有更新执行更新操作
		if (res.data && res.data.code == 0 && res.data.data) {
			let fileComment = res.data.data.fileComment
			//获取当前版本号
			const version = plus.runtime.version
			console.log(fileComment)
			if (fileComment != version) {
				uni.showModal({
					title: `发现新版本`,
					// title: `发现${fileComment}`,
					content: "确认更新",
					confirmText: '立即更新',
					cancelText: '稍后进行',
					success: (res) => {
						//确认检查更新
						if (res.confirm == true) {
							//当用户确定更新,执行更新,下面方法进行下载app
							_this.startDownload(fileComment, apkName)
						} else {
							//暂时不更新保存缓存时间
							const saveTime = dateCurrentDayTime()
							uni.setStorageSync('saveVersionDay', saveTime);
						}
					},
					fail: (res) => {

					}
				})
			} else {
				uni.showToast({
					title: '已是最新版本',
					icon: 'none'
				})
			}
		} else {
			uni.showToast({
				title: '已是最新版本',
				icon: 'none'
			})
		}

	},

第二步确认更新就执行startDownload方法

javascript 复制代码
startDownload(versons, name) {
				this.popupShow = true
				const dowUrl = `${uploadUrl}${this.downloadPath}?fileName=${name}&version=${versons}`
				//loading加载
				this.isDownloading = true;
				//设置进度条初始值
				this.downloadProgress = 0;
				this.downloadMessage = '';
				const url = dowUrl
				//进行下载操作
				const task = uni.downloadFile({
					url: url,
					success: (res) => {
						console.log(res)
						if (res.statusCode === 200) {
							// 下载成功,保存文件路径到临时路径  
							const tempFilePath = res.tempFilePath;
							// 下载完成再把下载进度弹框关闭即可
							plus.runtime.install( //安装
								res.tempFilePath, {
									force: true
								},
								function(res) {
									this.popupShow = false
									utils.showToast('更新成功,重启中');
									plus.runtime.restart();
								}
							);
							// 这里你可以将文件保存到本地或者进行其他处理  
							this.downloadMessage = `下载成功,文件路径:${tempFilePath}`;
						} else {
							this.popupShow = false
							uni.showToast({
								title: '下载失败',
								icon: 'none'
							})
							this.downloadMessage = `下载失败,状态码:${res.statusCode}`;
						}
						this.isDownloading = false;
					},
					fail: (err) => {
						this.downloadMessage = `下载失败,错误信息:${err.message}`;
						this.isDownloading = false;
					},
					complete: () => {
						// 无论成功或失败都会执行  
					}
				});
				const _this = this
				// 监听上传进度变化
				task.onProgressUpdate((res) => {
					this.downloadProgress = res.progress;
					if (res.progress == 100) {
						//取消弹框
						// task.abort()
					}
				});
			},

4.执行startDownload后就可以进行安装了

总结:会使用如下方法

使用uni-app的loading加载组件

javascript 复制代码
<u-loading :show="true"></u-loading>

使用uni-app的progress组件

javascript 复制代码
使用<progress :percent="downloadProgress" v-if="isDownloading" show-info></progress>组件

使用html5+检查版本

javascript 复制代码
plus.runtime.version

使用html5+安装

javascript 复制代码
plus.runtime.install()

使用downloadFile下载

javascript 复制代码
uni.downloadFile({url:url})

组件展示

<u-modal :show-title="false" v-model="popupShow" ref="uModal" :show-confirm-button="false">
	<view class="progressBox">
		<view class="">
			<u-loading :show="true"></u-loading>更新中...
		</view>
		<progress :percent="downloadProgress" v-if="isDownloading" show-info></progress>
	</view>
</u-modal>
相关推荐
2402_857583495 分钟前
基于 SSM 框架的 Vue 电脑测评系统:照亮电脑品质之路
前端·javascript·vue.js
web1508509664135 分钟前
在uniapp Vue3版本中如何解决webH5网页浏览器跨域的问题
前端·uni-app
Yvemil738 分钟前
《开启微服务之旅:Spring Boot Web开发举例》(一)
前端·spring boot·微服务
天涯学馆1 小时前
解锁WebAssembly与JavaScript交互的无限可能
前端·webassembly
少年姜太公1 小时前
从零开始详解js中的this(下)
前端·javascript·程序员
哑巴语天雨1 小时前
React+Vite项目框架
前端·react.js·前端框架
初遇你时动了情2 小时前
react 项目打包二级目 使用BrowserRouter 解决页面刷新404 找不到路由
前端·javascript·react.js
乔峰不是张无忌3302 小时前
【HTML】动态闪烁圣诞树+雪花+音效
前端·javascript·html·圣诞树
鸿蒙自习室2 小时前
鸿蒙UI开发——组件滤镜效果
开发语言·前端·javascript
曼陀罗2 小时前
【pre-commit/husky】配置
前端