uniapp项目更新

371 阅读2分钟

更新,更新要在项目刚打开就进行检测,所有的代码,都事写在app.vue的,如有不对,欢迎指出! app 参考文献

    const updateManager = uni.getUpdateManager();
    const updateManager = uni.getUpdateManager();
    updateManager.onUpdateReady(function(res) {
	uni.showModal({
	  title: '版本更新',
	  content: '新版本已经准备好,请重启应用!',
	  showCancel: false,
	  confirmText: '立即重启',
	  success(res) {
	     if (res.confirm) {
		updateManager.applyUpdate();
		}
            }
	});
      });
      
     //上面的就够用了 要是想处理断网的情况 可以加个下载失败
     updateManager.onUpdateFailed(function (res) { // 新的版本下载失败 });

检测APP更新

app更新就比较麻烦了 先从后台请求最新版本的数据 然后获取当前版本的版本号等数据 进行对比。然后根据后台返回的数据来判断是热更新还是整包更新,整包更新跳往下载页去更新,热更新进行弹窗更新,

		getAppUpdate(isShowUpdateHint) {
			if (this.globalData.isUpdateApp) {
				showToast({ msg: '您正在下载最新版本' });
				return;
			}

			// #ifdef MP-WEIXIN
			const updateManager = uni.getUpdateManager();
			updateManager.onUpdateReady(function(res) {
				uni.showModal({
					title: '版本更新',
					content: '新版本已经准备好,请重启应用!',
					showCancel: false,
					confirmText: '立即重启',
					success(res) {
						if (res.confirm) {
							updateManager.applyUpdate();
						}
					}
				});
			});
			// #endif
			// #ifdef APP-PLUS
			let that = this;
			appUpdate(isShowUpdateHint ? '检测更新...' : '')
				.then(result => {
					
					const data = JSON.parse(result.Data);
					
					let serverVersion = data.AndroidVerName;
					if (plus.os.name == 'iOS') {
						serverVersion = data.IOSVerName;
					}
					serverVersion = parseInt(StringUtils.charParseAll(serverVersion, '.', ''));
					let updateDesc = StringUtils.charParseAll(data.ApkSize, '¥', '\r\n');

					let isWgt = true;
					let downloadUrl = data.AppWgtURL;
					if (data.IsWgt == '0') {
						//整包更新
						isWgt = false;
						let version = StringUtils.charParseAll(plus.runtime.version, '.', '');
						version = parseInt(version);
						if (serverVersion > version) {
							if (plus.os.name == 'Android') {
								downloadUrl = data.ApkWebURL;
							} else {
								downloadUrl = data.IOSLinkURL;
							}
							that.showUpdateAppModal(isWgt, updateDesc, downloadUrl);
						} else {
							if (isShowUpdateHint) {
								showToast({ msg: '已是最新版本' });
							}
						}
					} else {
						//热更新
						plus.runtime.getProperty(plus.runtime.appid, function success(wgtInfo) {
							let version = StringUtils.charParseAll(wgtInfo.version, '.', '');
							version = parseInt(version);
							if (serverVersion > version) {
								that.downloadApk(isWgt, updateDesc, downloadUrl);
							} else {
								if (isShowUpdateHint) {
									showToast({ msg: '已是最新版本' });
								}
							}
						});
					}
				})
				.catch(reason => {
					if (isShowUpdateHint) {
						showToast({ msg: '网络错误,请稍后重试!' });
					}
				});
			// #endif
		},
		/**
		 * 下载安装包
		 */
		downloadApk(isWgt, updateDesc, downLoadUrl) {
			let that = this;
			this.globalData.isUpdateApp = true;

			if (!isWgt) {
				showToast({ msg: '开始下载...' });
			}
			console.log(isWgt, updateDesc, downLoadUrl);
			if (isWgt) {
				uni.downloadFile({
					url: downLoadUrl,
					success: result => {
						if (result.statusCode == 200) {
							plus.runtime.install(
								result.tempFilePath,
								{
									force: true
								},
								function success() {
									that.showUpdateAppModal(true, updateDesc, '');
								},
								function fail() {}
							);
						}
					},
					fail: () => {
						showToast({ msg: '下载安装包失败,请检查您的网络是否连接' });
					},
					complete: () => {
						getApp().globalData.isUpdateApp = false;
					}
				});
 } else {
				uni.navigateTo({
					url: '?url=' + downLoadUrl
				});
				this.appUpdateProgressListener();
			}
		},
		/**
		 * 显示更新提示,并执行更新操作
		 */
		showUpdateAppModal(isWgt, updateDesc, downLoadUrl) {
			showModal({
				title: '版本更新',
				msg: updateDesc,
				cancelText: '暂不更新',
				confirmText: '立即更新'
			}).then(() => {
				if (isWgt) {
					plus.runtime.restart();
				} else {
					if (downLoadUrl.indexOf('itms-apps') != -1) {
						plus.runtime.openURL(downLoadUrl);
					} else {
						this.downloadApk(isWgt, updateDesc, downLoadUrl);
					}
				}
			});
		},
		/**
		 * 开启app更新进度监听
		 */
		appUpdateProgressListener() {
			let that = this;
			let options = {
				cover: true,
				sound: 'none',
				title: '版本更新'
			};
			let intervalId = setInterval(function callBack() {
				if (that.globalData.isUpdateApp) {
					let content = '更新进度:' + that.globalData.updateProgress + '%';
					plus.push.createMessage(content, 'appUpdate', options);
				} else {
					clearInterval(intervalId);
					that.globalData.updateProgress = 0;
				}
			}, 500);
		},