注意:HbuilderX升级后,此时应用升级时必须先进行整包升级,不能直接进行差量升级(热更新),原因参考:uni-app运行环境版本和编译器版本不一致的问题。
(1) 版本号为三位:第一位用于更新大版本(apk),后两位用于差量小版本更新(wgt)
- 后台逻辑:在text配置文件中配置version、wgtUrl 和pkgUrl这三个字段,version需同.wgt和.apk中版本较大的版本号保持一致
{
"data": {
"code": "0",
"msg": "success",
"data": {
"version": "35.1.2",
"wgtUrl": "http://***.***.com.cn/upload/appapk/gongzuotai35_1_2.wgt",
"pkgUrl": "http://***.***.com.cn/upload/appapk/gongzuotai35.apk"
}
},
"statusCode": 200,
"header": {
"Transfer-Encoding": "chunked",
"Server": "nginx/1.16.1",
"Access-Control-Allow-Origin": "*",
"Connection": "keep-alive",
"Pragma": "no-cache",
"X-Android-Received-Millis": "1590544536402",
"Access-Control-Allow-Headers": "x-requested-with, content-type",
"Date": "Wed, 27 May 2020 01:55:36 GMT",
"X-Android-Selected-Protocol": "http/1.1",
"Cache-Control": "no-store, no-cache, must-revalidate",
"X-Android-Response-Source": "NETWORK 200",
"Expires": "Thu, 19 Nov 1981 08:52:00 GMT",
"X-Android-Sent-Millis": "1590544536386",
"_": "HTTP/1.1 200 OK",
"Content-Type": "application/json;charset=utf-8",
"X-Powered-By": "PHP/7.1.33"
},
"errMsg": "request:ok"
}
- 移动端在App.vue文件中处理版本更新逻辑:比较当前版本current和服务器返回的version字段,若(当前版本第一位 < 服务器版本第一位),则进行apk整包升级;若(当前版本第一位 = 服务器版本第一位 但 当前版本第二位< 服务器版本第二位),或者 (当前版本第一位 = 服务器版本第一位 且 当前版本第二位 = 服务器版本第二位,但 当前版本第三位< 服务器版本第三位),则进行wgt差量升级。
<script>
var _self;
export default {
methods:{
downloadAndHandleWgtFile:function(url){
uni.downloadFile({
url: url,
success: (downloadResult) => {
console.log("downLoadFile:" + JSON.stringify(downloadResult));
if (downloadResult.statusCode === 200) {
plus.runtime.install(downloadResult.tempFilePath, {
force: false
}, function() {
console.log('install success...');
plus.runtime.restart();
}, function(e) {
console.error('install fail...');
});
}
}
});
},
downloadAndHandleApkFile:function(url){
plus.nativeUI.showWaiting("下载中...");
var dtask = plus.downloader.createDownload( url, {}, function ( d, status ) {
if ( status == 200 ) { // 下载成功
var path = d.filename;
console.log("path:" + d.filename);
plus.runtime.install(path); // 安装下载的apk文件
} else {//下载失败
alert( "Download failed: " + status );
}
plus.nativeUI.closeWaiting();
});
dtask.start();
}
},
onLaunch: function() {
_self = this;
console.log('App Launch');
// #ifdef APP-PLUS
// 锁定屏幕方向
// plus.screen.lockOrientation('portrait-primary'); //锁定
plus.screen.lockOrientation("landscape");//根据重力方向横屏显示
// plus.navigator.setFullscreen(true);//应用全屏(只能隐藏状态栏,标题栏和虚拟返回键都还可以显示)
// 检测升级
plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
console.log("version:" + widgetInfo.version + ",name:" + widgetInfo.name);
var requestUrl = "http://" + _self.getIP() + "/";
uni.request({
url: requestUrl + 'index/update',
success: (res) => {
console.log('update success', JSON.stringify(res));
var res = res.data;
var pkgUrl = res.data.pkgUrl;
var wgtUrl = res.data.wgtUrl;
var currentVersions = widgetInfo.version.split('.');
var resultVersions = res.data.version.split('.');
if(currentVersions[0] - resultVersions[0] > 0){
console.log("当前版本超过服务器版本_0,为测试版");
return;
}else if(currentVersions[0] - resultVersions[0] < 0){//更新大版本
console.log("更新大版本");
uni.showModal({
title: '发现新版本',
content: '是否下载更新?',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
_self.downloadAndHandleApkFile(pkgUrl);
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
}else {
if(currentVersions[1] - resultVersions[1] > 0){
console.log("当前版本超过服务器版本_1,为测试版");
return;
}else if(currentVersions[1] - resultVersions[1] < 0){//更新小版本
console.log("更新小版本");
_self.downloadAndHandleWgtFile(wgtUrl);
}else{
if(currentVersions[2] - resultVersions[2] > 0){
console.log("当前版本超过服务器版本_2,为测试版");
return;
}else if(currentVersions[2] - resultVersions[2] < 0){//更新小版本
console.log("更新小版本");
_self.downloadAndHandleWgtFile(wgtUrl);
}else{
console.log("相同版本,无需更新");
}
}
}
/* var sub0 = currentVersions[0] - resultVersions[0];
var sub1 = currentVersions[1] - resultVersions[1];
var sub2 = currentVersions[2] - resultVersions[2];
console.log("版本更新:" + sub0 + "," + sub1 + "," + sub2);
if(sub0 < 0 ){//更新大版本
console.log("更新大版本");
uni.showModal({
title: '发现新版本',
content: '是否下载更新?',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
_self.downloadAndHandleApkFile(pkgUrl);
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
return;
}
if((sub0 == 0 && sub1 < 0) || (sub0 == 0 && sub1 == 0 && sub2 < 0)){//更新小版本(后两位)
console.log("更新小版本");
_self.downloadAndHandleWgtFile(wgtUrl);
} */
}
});
});
// #endif
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
},
// 捕获 app error
onError:function(err) {
console.log('App Error' + err);
}
}
</script>
<style>
</style>
(2) 版本号为三位(大版本.改需求.修bug):前两位用于更新大版本(apk),第三位用于差量小版本更新(wgt)
-
前端操作:可上传apk和wgt文件,并选择类型为线上版本(当前稳定版本)、开发版本(最新测试版本)和老版本(上一版稳定版本)
-
后台逻辑:比较线上版本的apk和wgt文件的版本号,若前两位不同则取apk的版本号作为version字段的值返回给移动端;前两位相同则取wgt的版本号作为version字段的值返回给移动端。
-
移动端在App.vue文件中处理版本更新逻辑:比较当前版本current和服务器返回的version字段,若(当前版本第一位 < 服务器版本第一位 )或 (当前版本第一位 = 服务器版本第一位 但 当前版本第二位< 服务器版本第二位),则进行apk整包升级;若(当前版本第一位 = 服务器版本第一位 且 当前版本第二位 = 服务器版本第二位,但 当前版本第三位< 服务器版本第三位),则进行wgt差量升级。
/* if(currentVersions[0] - resultVersions[0] > 0){
console.log("当前版本超过服务器版本_0,为测试版");
return;
}else if(currentVersions[0] - resultVersions[0] < 0){//更新大版本
console.log("更新大版本");
uni.showModal({
title: '发现新版本',
content: '是否下载更新?',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
_self.downloadAndHandleApkFile(pkgUrl);
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
}else {
if(currentVersions[1] - resultVersions[1] > 0){
console.log("当前版本超过服务器版本_1,为测试版");
return;
}else if(currentVersions[1] - resultVersions[1] < 0){//更新大版本
console.log("更新大版本");
uni.showModal({
title: '发现新版本',
content: '是否下载更新?',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
_self.downloadAndHandleApkFile(pkgUrl);
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
}else{
if(currentVersions[2] - resultVersions[2] > 0){
console.log("当前版本超过服务器版本_2,为测试版");
return;
}else if(currentVersions[2] - resultVersions[2] < 0){//更新小版本
console.log("更新小版本");
_self.downloadAndHandleWgtFile(wgtUrl);
}else{
console.log("相同版本,无需更新");
}
}
} */
var sub0 = currentVersions[0] - resultVersions[0];
var sub1 = currentVersions[1] - resultVersions[1];
var sub2 = currentVersions[2] - resultVersions[2];
console.log("版本更新:" + sub0 + "," + sub1 + "," + sub2);
if(sub0 < 0 || (sub0 == 0 && sub1 < 0)){//更新大版本(前两位)
console.log("更新大版本");
uni.showModal({
title: '发现新版本',
content: '是否下载更新?',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
_self.downloadAndHandleApkFile(pkgUrl);
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
return;
}
if(sub0 == 0 && sub1 == 0 && sub2 < 0){//更新小版本(第三位)
console.log("更新小版本");
_self.downloadAndHandleWgtFile(wgtUrl);
}
网友评论