注:本文为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(); } }); } } }); } }); }); }