注:本文为uni-app在线更新
修改版本号
在打包生成新的apk前一定!一定!一定要先修改 manifest.json 中的版本号 (重要的事情说三遍)。
比如之前是 1.0.0,那么新版本应该是 1.0.1 这样。
客户端检测升级
用户登录或进入首页需要检测当前版本是否为最新版本,在这边写了一个方法,传递两个版本号返还对比结果,代码奉上
/*
* 版本号比较方法
* 传入两个字符串,当前版本号:curV;比较版本号:reqV
* 调用方法举例:compare("1.0.1","1.0.2"),将返回false
*/
function compare(curV, reqV) {
if (curV && reqV) {
//将两个版本号拆成数字
var arr1 = curV.split('.'),
arr2 = reqV.split('.');
var minLength = Math.min(arr1.length, arr2.length),
position = 0,
diff = 0;
//依次比较版本号每一位大小,当对比得出结果后跳出循环(后文有简单介绍)
while (position < minLength && ((diff = parseInt(arr1[position]) - parseInt(arr2[position])) == 0)) {
position++;
}
diff = (diff != 0) ? diff : (arr1.length - arr2.length);
//若curV大于reqV,则返回true
return diff > 0;
} else {
//输入为空
console.log("版本号不能为空");
return false;
}
}
module.exports = {
compare: compare,
}
在版本号对比之前,我们还需要考虑手机型号ios和android的区别,因此需要使用uni-app的获取系统信息的方uni.getSystemInfo。
// 获取手机型号
if (res.platform == ") { // GetPublicNewEditionForAndroid为后端提供的获取最新版本信息接口
this.$api.AppInformation.GetPublicNewEditionForAndroid().then(res => {
// 获取当前已安装app的版本
plus.runtime.getProperty(plus.runtime.appid, function(inf) {
uni.setStorageSync("version", inf.version);
// 获取版本对比结果versionCompare(该方法为上文提供的版本对比方法,名称自定义)
var resault = versionCompare(
res[1].data.result.versionNum,
inf.version
);
if (resault) {
var appUrl = res[1].data.result.downUrl;
uni.showModal({
title: "版本检测",
content: "该App有新版本上线,请及时更新",
success: function(res) {
if (res.confirm) {
uni.showLoading({
title: "更新中……"
});
uni.downloadFile({
//执行下载
url: appUrl,
success: downloadResult => {
//下载成功
if (downloadResult.statusCode === 200) {
uni.showModal({
title: "",
content: "更新成功,确定现在重启吗?",
confirmText: "重启",
confirmColor: "#EE8F57",
success: function(res) {
if (res.confirm) {
plus.runtime.install(
//安装
downloadResult.tempFilePath,
{
force: true
},
function() {
// utils.showToast('更新成功,重启中');
plus.runtime.restart();
},
function(e) {
// utils.showToast('更新失败');
}
);
}
}
});
}
},
complete: () => {
uni.hideLoading();
}
});
}
}
});
}
});
});
}