uniapp app版本检测,升级版本

需求

在用户已经安装过app ,下次进入自动检查是否有新版本需要升级更新!借用了uniapp 插件市场的热更新升级插件。
uniapp升级插件
新建一个文件 updateVersion.js

function check(param = {}) {
	// 合并默认参数
	param = Object.assign({
		title: "检测到有新版本!",
		content: "请升级app到最新版本!",
		canceltext: "暂不升级",
		oktext: "立即升级"
	}, param)
	if (!param.api) {
		return false;
	}
	plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => {
		// console.log('version=' + widgetInfo.version);
		//获取版本信息
		let platform = plus.os.name.toLocaleLowerCase()
		// widgetInfo.version = '1.0.0'
		uni.request({
			url: param['api'] + '?token=' + uni.getStorageSync('login_token'),
			data: {
				platform: platform,  //获取的手机的版本ios 还是android
				version: widgetInfo.version,   //获取的版本信息
				'from': param['from'], 
			},
			header: param['header'],
			method: 'GET',
			dataType: 'json',
			success: (result) => {
				let data = result.data ? result.data : null
				// console.log('result.data===', result.data)
				if (data && data.code == 0 && data.url) {
					// if(/\.wgt$/i.test(data.url) || (platform == 'android' &&  /\.apk$/i.test(data.url)))
					if (platform == 'android' && data.url.includes("apk")) {
						// 如果是热更新  wgt 或 android平台下apk
						startdownload(param, data);
						return
					}
					if (platform == 'ios') {
						// 如果是ios,则跳转到appstore
						uni.showModal({
							title: param.title,
							content: data.log ? data.log : param.content,
							// showCancel: data.force ? false : true,
							// confirmText: param.oktext,
							showCancel: false,
							buttonText: param.oktext,
							// cancelText: param.canceltext,
							success: res => {
								if (!res.confirm) {
									console.log('取消了升级');
									return
								}
								plus.runtime.openURL(data.url)
							}
						})
						return;
					}
				}
			},
			fail: (res) => {
				console.log('fail', res)
			}
		})
	});
}

function startdownload(param, data) {
	// console.log('准备升级222')
	uni.showModal({
		title: param.title,
		content: data.log ? data.log : param.content,
		showCancel: data.force ? false : true,
		confirmText: param.oktext,
		cancelText: param.canceltext,
		success: res => {
			if (!res.confirm) {
				console.log('取消了升级');
				return
			}
			if (data.url.includes("apk")) {
				//去应用市场更新
				plus.runtime.openURL(data.shichangurl);
				plus.runtime.restart();
			} else {
				// 开始下载
				// 创建下载任务
				var dtask = plus.downloader.createDownload(data.url, {
						filename: "_downloads/"
					},
					function(d, status) {
						console.log('d', d)
						console.log('status', status);
						// 下载完成
						if (status == 200) {
							plus.runtime.install(d.filename, {
								force: false
							}, function() {
								//进行重新启动;
								plus.runtime.restart();
							}, (e) => {
								uni.showToast({
									title: '安装升级包失败:' + JSON.stringify(e),
									icon: 'none'
								})
							});
						} else {
							uni.showToast({
								title:"下载升级包失败,请手动去站点下载安装,错误码: " + status,
								icon:'none'
							})
							// this.tui.toast("下载升级包失败,请手动去站点下载安装,错误码: " + status);
						}
					});

				let view = new plus.nativeObj.View("maskView", {
					backgroundColor: "rgba(255,255,255,.2)",
					left: ((plus.screen.resolutionWidth / 2) - 45) + "px",
					bottom: "80px",
					width: "90px",
					height: "30px"
				})
				view.drawText('开始下载', {}, {
					size: '14px',
					color: '#000000'
				});
				view.show()
				dtask.addEventListener("statechanged", (e) => {
					if (e && e.downloadedSize > 0) {
						let jindu = ((e.downloadedSize / e.totalSize) * 100).toFixed(2)
						view.reset();
						view.drawText(jindu + '%', {}, {
							size: '14px',
							color: '#000000'
						});
					}
				}, false);
				dtask.start();
			}
		}
	});
}

export default {
	check
}

在app.vue里面

import checkappupdate from 'common/updateVersion.js'
	checkappupdate.check({
			title:"检测到有新版本!",
				content:"请升级app到最新版本!",
				canceltext:"暂不升级",
				oktext:"立即升级",
				api:'/apiv2/fire-system-api/system/configer/update', //请求后台的api
				'from':"apple",  // 分辨平台apple //huawei //web
				header:header  //需要传给后台的请求头部自定义
			})

后台返回 数据 。存在新wgt 或android 平台下apk
苹果返回 https://apps.apple.com/cn/app/%E7%BA%A2%E8%B1%A1%E8%B5%9B%E4%BA%8B/idxxxxx

  {
        code:0
        msg:"ok"
        version:1.2.1//版本号
        url:'http...apk|wgt'//url下载地址,wgt优先,如果不存在新wgt,并且是ios,则此处为AppStore的地址
        log:''//更新文字说明,支持 \n 换行
        force:1// 是否强制升级,force=1则是强制升级,用户无法关闭升级提示框
    }

如果不存在新apk或wgt,则返回


    {
        code:1,
        msg:"no"
    }

你可能感兴趣的:(uni,app,ios,android)