cordova手动更新

1:依赖

cordova-plugin-file

 

cordova-plugin-file-transfer

cordova-plugin-file-opener2

 

 第二个参数:application/vnd.android.package-archive来源

cordova plugin add cordova-plugin-app-version//获取cordova版本号
cordova plugin add cordova-plugin-file//获取程序相关目录
cordova plugin add cordova-plugin-file-transfer//操作文件上传/下载
cordova plugin add cordova-plugin-file-opener2//打开本地文件

2:代码实现

思路实现:

1:首先使用cordova.getAppVersion.getVersionNumber()这个方法获取到cordova版本号

2:请求接口获取到最新的版本号信息(也可以请求txt等文件,只要能获取到版本就可以了)

3:对比版本号差异,如果版本一致则不变

4:获取到apk下载地址

5:获取到cordova对象,赋值好:apk下载地址,apk打开地址(直接启动apk而不需要用户操作)

6:实列化FileTransfer  (操作文件上传/下载)

7:使用FileTransfer  的download方法开始下载文件

8:使用FileTransfer  的onprogress方法监听下载进度(下载完成会自动打开,这里是为了告诉用户下载进度)

9:cordova.plugins.fileOpener2.open打开下载地址

/**选中项的信息 */
let system: any = localStorage.getItem("system");
function onDeviceReady() {
	cordova.getAppVersion.getVersionNumber().then(function (version: any) {
		console.log(version, "当前版本");
		versIon.value = version;
		system = JSON.parse(system);
		/**
		 * 从服务器获取应用的版本信息,和本地应用版本对比
		 */
		let uel = system.address + "xxx";
		axios
			.post(
				uel,
				{
					orgid: system.organization,
					mactype: "evaluator",
					systemname: store.systemname,
				},
				{
					headers: {
						Authorization: system.token,
					},
				}
			)
			.then((res: any) => {
				console.log(res.data);
				if (res.data.code === 200) {
					if (res.data.data.version > version) {
                        // 更新
						versions.value.filesPath = `apk下载地址`;
					}
				}
			})
			.catch((err: any) => {
				console.log(err, "版本接口请求失败");
			});
		// 监听网络状况,无网络时
		document.addEventListener(
			"offline",
			function () {
				console.log("网络异常,不能连接到服务器!");
			},
			false
		);
	});
}
/*
 * 检测新版本升级
 */
function upgradeForAndroid(ApkUrl: any) {
	schedule.value = "0";
	//从window中获取Cordova对象
	var cordova = window.cordova;
	var url = system.address + ApkUrl;//apk下载地址
	var saveUrl = cordova.file.externalDataDirectory + "/app-debug.apk"; //要下载的目标路径及文件名(本地存储路径)

	var fileTransfer = new FileTransfer();
	// 开始下载并打开
	fileTransfer.download(
		url,
		saveUrl,
		function (entry: any) {
			console.log("download complete: " + entry.toURL());
			let url = entry.toURL();
			cordova.plugins.fileOpener2.open(
				url,
				"application/vnd.android.package-archive",
				{
					error: function (e: any) {
						console.log("open fail", e);
					},
					success: function (e: any) {
						console.log("open successfully", e);
					},
				}
			);
		},
		function (error: any) {
			console.log("download error source " + error.source);
			console.log("download error target " + error.target);
			console.log("download error code" + error.code);
		}
	);
	// 监听下载获取进度条
	fileTransfer.onprogress = function (progressEvent: any) {
		console.log(progressEvent, "下载进度");

		if (progressEvent.lengthComputable) {
			var downloadProgress =
				(progressEvent.loaded / progressEvent.total) * 100;
			schedule.value = Math.floor(downloadProgress) + "";
			console.log(schedule.value, "已经下载");
			if (Math.floor(downloadProgress) == 100) {
				schedule.value = "-1";
				centerDialogVisible.value = false;
			} else {
				console.log("下载完成后会自动弹出安装");
			}
		}
	};
}

3:执行顺序

1:监听 deviceready 事件执行完毕   (这个事件是cordova专属的监听跟android交互加载的)

document.addEventListener("deviceready", onDeviceReady, false);

2:执行onDeviceReady事件对比版本

3:弹窗提示用户是否更新

4:点击更新按钮执行 upgradeForAndroid 事件

参考文章:看了很多文章但是没有很好的实现最后参考这个文章加上项目需求实现了

https://juejin.cn/post/6844904138388537351?from=search-suggest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跟Bug双向奔赴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值