uniapp - 实现安卓APP实时在线更新APP

思路:启动APP时,需要一个接口提供是否有APP包更新,通过接口返回更新包的版本号、更新地址进等信息,通过获取app包版本号与更新包的版本号进行比较来进行更新。

一、发布蒲公英平台,进行实时APP更新(方案一)

1、获取manifest.json里的配置信息:plus.runtime.getProperty(plus.runtime.appid, function(widgetinfo) {})。

2、通过蒲公英api, 检测App是否有更新 接口获取APP更新内容,蒲公英 - 文档中心 - API 2.0

uniapp - 实现安卓APP实时在线更新APP_第1张图片

 appKey值是APP唯一的key

uniapp - 实现安卓APP实时在线更新APP_第2张图片

3、用户版本号小于升级包版本号,先升级。

直接上代码:封装的方法可直接调用

export function checkUpdateApp() {
	//  获取manifest.json里的配置信息
	plus.runtime.getProperty(plus.runtime.appid, function(widgetinfo) {
		// 可以根据manifest.json里的应用名称来进行针对性的APP升级
		if (widgetinfo.name == 'xxxx') { //APP名称
			uni.request({
				url: 'https://www.pgyer.com/apiv2/app/check', //检测App是否有更新
				data: {
					_api_key: '', //API 用户自己的Key
					appKey: '' //App应用的唯一Key
				},
				success: check => {
					console.log('check', check.data);
					if (check.statusCode == 200 && check.data.code == 0 && check.data.data) {
						console.log('1234');
						let data = check.data.data;
						console.log('data', data);
						let version = widgetinfo.version, //用户当前版本
							appVersion = data.buildVersion, //升级包版本
							appName = widgetinfo.name, //app名称
							// updata = data.apk_client_force_updata,//是否强制热更新
							appurl = data.downloadURL, //升级包地址
							intro = '发现新的《瑞金田长》APP,需要更新APP'; //升级包提示
						// wgt_version = data.wgt_version,//热更新版本号
						// wgt_download = data.wgt_download;//热更新地址
						//如果用户版本号小于升级包版本号,先升级
	
						if (data && version < appVersion) {
							uni.showModal({
								title: '更新提示',
								confirmText: '立即升级',
								content: intro,
								success: res => {
									if (res.confirm) {
										uni.showLoading({
											title: '正在更新',
											mask: true
										});
										uni.downloadFile({
											url: appurl,
											success: download => {
												if (download.statusCode == 200) {
													plus.runtime.install(
														download.tempFilePath,
														{
															force: false
														},
														() => {
															uni.hideLoading();
															plus.runtime.restart(); //更新成功启动
														},
														err => {
															//若没下载成功还是去下载
															uni.hideLoading();
															uni.showToast({
																title: '更新失败,将跳转下载页面',
																icon: 'none',
																duration: 2000
															});
														}
													);
													setTimeout(function() {
														plus.runtime.openURL(appurl);
													}, 2000);
												}
											}
										});
									} else if (res.cancel) {
										console.log('用户点击取消');
										uni.showToast({
											title: '版本无法继续使用瑞金田长APP,请先升级',
											icon: 'none',
											duration: 2000
										});
										//退出app
										setTimeout(function() {
											plus.runtime.quit();
										}, 2000);
									}
								},
								fail: () => {
									uni.hideLoading();
								}
							});
						} else {
							
						}
					}
				}
			});
		} else {
			//非安卓
		}
	});
}

二、后台提供接口(方案二) APP升级或热更新

1、获取manifest.json里的配置信息:plus.runtime.getProperty(plus.runtime.appid, function(widgetinfo) {})

2、通过接口获取更新内容

3、如果用户版本号小于升级包版本号,先升级。

4、如果用户版本号大于升级包但不等于热更新版本的情况下,去热更新

直接上代码:



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