IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> uniapp app版本检测升级版本 -> 正文阅读

[移动开发]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"
    }
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:17:43  更:2021-09-18 10:18:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:52:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码