记Uniapp自动更新问题

本文记录了uniapp在Android环境下实现自动更新的详细步骤,包括修改Android Studio的targetSdkVersion,添加必要权限,以及关键的更新检查和下载安装流程。通过检查平台、请求最新版本信息、下载更新包到指定目录,最终实现安装更新。
摘要由CSDN通过智能技术生成

百度上搜到很多uniapp自动更新的写法,但是测试之后基本上都是可以检查版本号,下载更新包,然后无法唤起自动更新的安装程序,最后找到解决的办法记录一下。

打包过程还是一样,但是需要修改一些配置,如果忘记怎么打包可以参考 HBuilderX项目打包安卓操作记录

1、Android Studio中build.gradle(:app)的targetSdkVersion 改为26以上

2、确保HBuilderX中的权限是否有完整添加

3、将2中添加的权限添加到Android Studio的Androidmanifest.xml 中

自动更新代码

//检查平台类型,在需要做更新检查的地方可以调用CheckPlatForm
function CheckPlatForm() {
	uni.getSystemInfo({
		success: (res) => {
			//检测当前平台,如果是安卓则启动安卓更新  
			if (res.platform == "android") {
				this.AndroidCheckUpdate();
			}
		}
	})
}

 

AndroidCheckUpdate: function() {
	var that = this;

	//uni.removeStorageSync("lastCheckUpdate") //test
	var lastCheckUpdate = uni.getStorageSync("lastCheckUpdate"); //上次检查日期
	var tipTimeLength = 3600; //提示间隔1小时
	var curTime = new Date().getTime(); //当前日期

	//如果近期有提示过,则不需要再提示
	if (lastCheckUpdate != '' && lastCheckUpdate != undefined) {
		if (lastCheckUpdate + tipTimeLength <= curTime)
			return
	}

	//请求获取最新版本号 
	that.tui.request(that.$global.ApiUrl.CheckVersion, "get")
		.then((data) => {
			if (data.success) {
				var downLoadUrl = data.data.downloadUrl;
				var updType = data.data.updType;
				var force = data.data.force;
				var serverVersion = data.data.code;


				plus.runtime.getProperty(plus.runtime.appid, function(wgtinfo) {
					var curVersion = wgtinfo.version

					if (data.data.code == curVersion) {
						return;
					}
					if (force) {
						that.GetInstallFile(downLoadUrl, updType, force)

					} else {
						uni.showModal({
							title: "版本更新",
							content: "当前版本:" + curVersion + "\r\n服务器版本:" + data.data
								.code + "\r\n\r\n是否开始更新?",
							showCancel: !force,
							confirmText: "立即更新",
							cancelText: "稍后提醒",
							success: function(res) {
								if (res.confirm) {
									that.GetInstallFile(downLoadUrl, updType, force)
								} else {
									//记录最后更新时间
									uni.setStorageSync("lastCheckUpdate",
									new Date().getTime());
								}
							}
						})
					}
				});
			} else {
				that.tui.toast("无法获取最新版本号")
			}
		})
		.catch((res) => {

		})
}
GetInstallFile:function(url, updType, force){
	var that = this
	var list = url.split('/');
	var fileName = list[list.length - 1];
	var filePath = "_downloads/"+fileName
	
	plus.io.resolveLocalFileSystemURL(filePath,
		function(res){
			that.installApp(filePath)
		},function(res){
			that.StarDownLoad(url,updType,force)
		})
}
//下载最新版本
StarDownLoad: function(url, updType, force) {
	var that = this
	if (url == undefined || url == "") {
		that.tui.toast("下载失败,下载路径不存在!")
		return
	}
	uni.showLoading({
		mask: true,
		title: "下载更新中"
	})
	var dtask = plus.downloader.createDownload(url, {},
		function(d, status) {
			// 下载完成  
			if (status == 200) {
				that.installApp(d.filename)
			} else {
				that.UpdFail(force)
			}
		});
	dtask.start();
}
//安装新APP
installApp:function(filePath){
	uni.hideLoading()
	uni.showLoading({
		mask: true,
		title: "安装中"
	})
	filePath=plus.io.convertLocalFileSystemURL(filePath)
	plus.runtime.install(filePath, {},
		function(res) {
			uni.hideLoading()
			uni.showToast({
				title: "安装成功",
				showCancel: false,
				success: function() {
					plus.runtime.restart()
				}
			})
		},
		function(error) {
			that.UpdFail(force)
		})
}
//更新失败提示
UpdFail: function(force) {
	uni.hideLoading()
	uni.showToast({
		title: '更新失败',
		icon: error,
		mask: false,
		duration: 1500,
		showCancel: false,
		success: function(res) {
			//如果要求强制更新,然而更新失败则退出app
			if (force) {
				plus.runtime.quit();
			}
		}
	});
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值