app版本更新,下载显示进度条

该代码段描述了一个移动端应用检查和提示用户进行版本更新的过程。它首先检查用户登录状态和是否已选择不再提醒,然后对比当前版本与线上最新版本,如果需要更新,显示更新提示并提供下载选项。下载过程中显示进度条,下载完成后自动安装并重启应用。
摘要由CSDN通过智能技术生成
<u-mask :show="jindushow" :mask-click-able="false">
			<view class="upshow flex flex_align_center flex_center">
				<view class="upshowcon text_center">
					<view class="img">
						<image src="../static/images/up.png"></image>
					</view>
					<view class="tit ">新版本下载中</view>
					<view class="jindut">
						<u-line-progress :striped="true" :percent="jindu" 
						active-color="#007BFF"
						:striped-active="true"></u-line-progress>
					</view>
					<view class="info">版本正在更新,请稍等</view>
					
				</view>
			</view>
		</u-mask>
		<u-mask :show="upshow" :mask-click-able="false">
			<view class="upshow flex flex_align_center flex_center">
				<view class="upshowcon ">
					<view class="img">
						<image src="../static/images/up.png"></image>
					</view>
					<view class="tit text_center">检测到有新版本</view>
					<view class="updetail">
						<view class="tit2 ">更新内容:</view>
						<view class="upinfo flex flex-colum">
						<view v-for="item in upcon">{{item}}</view>
					</view>
					
					
					</view>
					
					<view class="btnlist text_center">
						<view class="btn" @click="dialogConfirm">立即升级</view>
						<view class="text" @click="dialogClose,upshow=false">不再提醒</view>
					</view>
				</view>
			</view>
		</u-mask>
upshow: false,
jindushow: false,
jindu: 0,
mounted() {

			// 获取登录标识(登录之后回存储一个标识isLogin=1,[退出登录之后会清空],从本地获取这个标识,最开始的时候没有登录标识,获取不到isLogin='')
			var isLogin = uni.getStorageSync('isLogin')
		
			// 获取不再提醒标识 0或者空代表要提醒,1代表不再提醒
			var updateTips = uni.getStorageSync('updateTips')
		
			// 判断只有登录之后并且提醒标识不等于1才会提示更新 (提醒标识最开始为空,用户点击不再提醒之后本地会存储updateTips =1,[退出登录之后会清空])
			if (isLogin == 1 && updateTips != 1) {
				// 登录之后,没有不再提醒标识 就判断线上版本号和当前版本号是否一致 
				this.updateVersion()
			} else if (isLogin == 1 && updateTips == 1) {
				// 登录之后 有不再提醒标识 就判断线上版本号和(不再提醒的那个版本号)是否一致 ,不一致就提示更新
				// 有不再提醒标识的话,说明肯定有不再提醒的版本
				this.noTipsUpdateVersion()
			}
		},
noTipsUpdateVersion() {
				//#ifdef APP-PLUS
				var that = this
				//获取 不再提醒的版本号
				var noTipsVersion = uni.getStorageSync('noTipsVersion')
				// 获取线上最新的版本号,
				that.$work.getappupdate().then(res => {
					this.upappurl=formatPic(res.records[0].appPath.replace(/\\/g,'/'))
					this.newVersionCode = Number(res.records[0].appVersion)
					this.upcon=res.records[0].updateContent.split('\n')
					console.log(this.upcon,'oppppppppp')
					// 判断不再提醒版本号小于线上最新的版本号,就提示更新
					console.log(parseInt(noTipsVersion), '不再提醒版本号', parseInt(this.newVersionCode), '新版本号');
					if (Number(noTipsVersion) < Number(this.newVersionCode)) {
						console.log("有新版本并且需要升级");
						// that.$refs.alertDialog.open()
						that.upshow = true
					
					}
				})
				//#endif
			},
	// 没有不再提醒标识的时候,用当前版本和新版本对比
			updateVersion() {
				//#ifdef APP-PLUS
				var that = this
				//获取 当前版本号
				var currentVersionCode = ''
				plus.runtime.getProperty(plus.runtime.appid, (info) => {
					currentVersionCode = info.versionCode;
					// 获取线上最新的版本号,
					that.$work.getappupdate({size:1,current:1}).then(res => {
						if(res.records.length>0){
							console.log(res);
							this.upappurl=formatPic(res.records[0].appPath.replace(/\\/g,'/'))
							this.newVersionCode = Number(res.records[0].appVersion)
							this.upcon=res.records[0].updateContent.split('\n')
							// 判断当前的版本号小于线上最新的版本号,就提示更新
							console.log(this.upcon,'this.upcon');
							console.log(Number(currentVersionCode),this.newVersionCode,'新旧版本号');
							if (Number(currentVersionCode) < this.newVersionCode) {
								console.log("有新版本并且需要升级");
								// that.$refs.alertDialog.open()
								that.upshow = true
							}
						}
					})
				})
				//#endif
			},
dialogClose() {
				console.log('用户点击不再提醒');
				uni.setStorageSync('updateTips', '1');
				uni.setStorageSync('noTipsVersion', this.newVersionCode);
			},
			dialogConfirm() {
				let _this = this
				let platform = plus.os.name.toLocaleLowerCase()
				if (platform == 'ios') {
					// 如果是ios,则跳转到appstore
					plus.runtime.openURL(result.data.data.url)
					return;
				}
				console.log(_this.upappurl,'_this.upappurl')
				let versionUrl = _this.upappurl
				// 创建下载任务
				var dtask = plus.downloader.createDownload(versionUrl, {
						filename: "_downloads/"
					},
					function(d, status) {
						// 下载完成
						if (status == 200) {
							plus.runtime.install(d.filename, {
								force: true
							}, function() {
								//进行重新启动;
								plus.runtime.restart();
							}, (e) => {
								uni.showToast({
									title: '安装升级包失败:' + JSON.stringify(e),
									icon: 'none'
								})
							});
						} else {
							uni.showToast({
								title: '下载升级包失败,请手动去站点下载安装,错误码: ' + status,
								icon: 'none'
							})
						}
					});
				_this.upshow = false
				_this.jindushow = true;
			
				dtask.addEventListener("statechanged", (e) => {
					if (e && e.downloadedSize > 0) {
						let jindu = ((e.downloadedSize / e.totalSize) *
							100).toFixed(2)
						

						_this.jindu = jindu
					
					}
				}, false);
				dtask.start();
			},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值