HBuilder实现软件自动升级(优化篇)

前言

受前篇博客《HTML5进阶(二)HBuilder实现软件自动升级》(点击查看详情)的影响,测试过程中发现APP自动更新还是存在问题,第一次升级没有任何问题。第二次升级时,若wrt升级包的名字相同,则会出现以下错误提示:

估计是HBuilder的BUG导致出现以上错误。受社区中盆友们思路的启发,在每次更新时提交不同文件名的wrt更新包,方可解决以上问题。

同时在上篇博客中提到“检测更新更好的模式应该是客户端提交本地应用资源版本号到升级服务器,由升级服务器判断是否可更新并且返回App升级资源包下载地址,避免在客户端写资源下载地址;”。由此,自己由本地检测版本更新变更为将本地app版本提交至升级服务端,由服务端判断app是否可更新,若存在更新版本则返回相应的新版本号及版本下载地址。

在提交新版本时,应注意版本号的一致性,即wrt版本号、版本号文件version.txt中的版本号相一致。

客户端源码(拿走不谢)

var wgtVer  = null;
function plusReady(){
// 获取本地应用资源版本号
plus.runtime.getProperty(plus.runtime.appid,function(inf){
wgtVer = inf.version;
localStorage.setItem('newVer', wgtVer);
console.log(localStorage.getItem('newVer'));
console.log("当前应用版本:" + wgtVer);
/*alert( "国际移动设备身份码IMEI: " + plus.device.imei );
alert( "国际移动用户识别码IMSI: " + plus.device.imsi );
alert( "设备唯一标识号uuid: "+plus.device.uuid );*/
console.log("=============版本测试=============");
var version = {
'version': wgtVer
};
appCallServer($http, "9104", version,
function(data) {
console.log("9104_版本查询成功" + JSON.stringify(data));
// H5 plus事件处理,弹出提示信息对话框
plus.nativeUI.confirm("\"立马送药\"检测到新版本,是否更新?", function(e) {
if (e.index == 0) {
console.log("确定更新!");
downWgt(data.newVersion, data.url); // 下载升级包
}
}, "                  立马送药", ["确定", "取消"]);
}, function(data) {
/*$ionicLoading.show({
template: '测试'
});
$timeout(function() {
$ionicLoading.hide();
}, 1200);*/
});
});
}
if(window.plus){
plusReady();
}else{
document.addEventListener('plusready',plusReady,false);
}
// 下载新版本
function downWgt(newVer, wgtUrl){
plus.nativeUI.showWaiting("下载wgt文件...");
plus.downloader.createDownload( wgtUrl, {filename:"_doc/update/"}, function(d,status){
if ( status == 200 ) {
console.log("下载wgt成功:"+d.filename);
installWgt(d.filename,newVer);// 安装wgt包
} else {
console.log("下载wgt失败!");
plus.nativeUI.alert("下载wgt失败!");
}
plus.nativeUI.closeWaiting();
}).start();
}
// 更新应用资源
function installWgt(path,newVer){
plus.nativeUI.showWaiting("安装wgt文件...");
// force:false进行版本号校验,如果将要安装应用的版本号不高于现有应用的版本号则终止安装,并返回安装失败
plus.runtime.install(path,{force:false},function(){
plus.nativeUI.closeWaiting();
console.log("安装wgt文件成功!");
localStorage.setItem('newVer', newVer);
// H5 plus事件处理,弹出提示信息对话框
plus.nativeUI.confirm("应用资源更新完成,是否重新打开应用?", function(e) {
if (e.index == 0) {
console.log("确定重新打开应用!");
plus.runtime.restart();
}
}, "                  立马送药", ["确定", "取消"]);
},function(e){
plus.nativeUI.closeWaiting();
console.log("安装wgt文件失败[" + e.code + "]:" + e.message);
plus.nativeUI.alert("安装wgt文件失败[" + e.code + "]:" + e.message);
});
}

服务端源码(拿走不谢)

// check version
public static boolean do_9104(RequestMessage request,ResponseMessage response) {

logger.info("\n\n------------Check_APP_Version_9104 debug info-------------\n请求数据包信息:" + request.json.toString());
String version = request.getString("version").trim();
String currentVersion = FileUtil.readFile(MyConst.VERSION_FILE_PATH).replaceAll("null","").trim();
logger.info("当前APP版本:[" + currentVersion + "]");
if(!version.isEmpty() && !currentVersion.isEmpty() && (!version.equals(currentVersion))){
response.json.element("newVersion", currentVersion); 	 // 返回最新版本
response.json.element("url", MyConst.WGT_URL + currentVersion + ".wgt"); // 返回wgt文件下载地址
}else if(!version.isEmpty() && !currentVersion.isEmpty() && (version.equals(currentVersion))){
response.result = MyConst.ERR_VERSION_SAME;
response.errtext = "当前已是最新版本";
}else{
response.result = MyConst.ERR_VERSION;
response.errtext = "版本信息查询失败";
return (false);
}
return true;
}

优化

在上面的app版本管理中,更新包及版本控制文件version.txt均需要手动添加、更改,这一体验令人极为不爽,遂决定进一步优化之~

为了进一步方便管理人员对版本控制的操作。在管理端进一步增加通过程序增加更新包的功能模块,该功能模块能够实现更新包的上传,同时将新的版本号写入version.txt版本文件中。

参考文献

http://blog.csdn.net/sunhuaqiang1/article/details/50804397

美文美图

HTML5进阶(三)HBuilder实现软件自动升级(优化篇)的更多相关文章

  1. HTML5进阶(二)HBuilder实现软件自动升级

    HBuilder实现软件自动升级 前言 移动APP开发好后需要实现软件自动升级功能,经过一番搜索,发现HBuilder具有"App资源在线升级更新"的功能,遂研究之. 经过一番测试 ...

  2. 在C#中实现软件自动升级

    在C#中实现软件自动升级 winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,本文结合实际情况,通过软件实现自动升级,弥补了这一缺陷,有较好的 ...

  3. 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇

    本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. 一.前言 网络优化解决的核心问题有三个 ...

  4. 在WinForm中使用Web Service来实现软件自动升级

    来源:互联网 winform程序相对web程序而言,功能更强大编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术 ...

  5. 在WinForm中使用Web Services 来实现 软件自动升级( Auto Update ) (C#)

    winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术方案,弥补了 ...

  6. 在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#)

    winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术方案,弥补了 ...

  7. java CS结构软件自动升级的实现

    前段时间做了一个工具发布给公司的各部门使用后反馈了不少BUG,每次修改后均需要发邮件通知各用户替换最新版本,很不方便,因此后来就写了一个自动升级的功能,这样每次发布新的版本时只需要将其部署到自动升级服 ...

  8. c# 基于FTP协议的简易软件自动升级程序

    最近在重写了一个老的产品条码扫描程序,客户端数越有30个,因为经常有更新,C/S维护非常不方便,所以做一个自动更新程序特别有必要. 在网上随便找了找自动更新的方案,大多使用VS的发布/更新功能,不太喜 ...

  9. hbuilder 开发app 自动升级

    使用huilder 开发app  ,实现app升级功能 1. var wgtVer = null; //用于获取系统当前版本 var currentversion = null; //用于获取系统最新 ...

随机推荐

  1. C语言中file文件指针概念及其操作 (转载)

    文件 文件的基本概念 所谓"文件"是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名.实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件. ...

  2. [Gradle系列]Gradle发布module库到jCenter, 并构建自己的企业Maven私服

    Tamic 作者: http://blog.csdn.net/sk719887916/article/details/53224544 前言 andorid开发者经常会看到xx公司发布了xx项目,xx ...

  3. ELK搭建

    ELK安装 elasticsearch安装 * 下载elasticsearch-5.0.0.tar.gz,并解压. 通过elasticsearch.yml可设置host和port. vim confi ...

  4. Linux动态频率调节系统CPUFreq之一:概述

    随着技术的发展,我们对CPU的处理能力提出了越来越高的需求,芯片厂家也对制造工艺不断地提升.现在的主流PC处理器的主频已经在3GHz左右,就算是智能手机的处理器也已经可以工作在1.5GHz以上,可是我 ...

  5. iOS界面不能点击(tableView 的cell 不能使用点击事件,tableView也不能上下滚动)

    iOS开发中间遇到了很多问题,有些后来又遇到,竟然忘记怎么处理了,所以还是来写下博客记录自己遇到的问题,方便自己也方便别人. 之前想的是项目小,就用storyboard在绘制界面,但是项目慢慢的扩展, ...

  6. 数据标准化/归一化normalization

    http://blog.csdn.net/pipisorry/article/details/52247379 基础知识参考: [均值.方差与协方差矩阵] [矩阵论:向量范数和矩阵范数] 数据的标准化 ...

  7. UNIX网络编程——原始套接字的魔力【续】

    如何从链路层直接发送数据帧 上一篇里面提到的是从链路层"收发"数据,该篇是从链路层发送数据帧. 上一节我们主要研究了如何从链路层直接接收数据帧,可以通过bind函数来将原始套接字绑 ...

  8. 1.QT中的容器QVector,QList,QSet,QMap,QQueue,QStack,QMultiMap,QSingleList等

    1  新建一个项目 在pro文件中只需要加上CONFIG += C++11 main.cpp #include <QMap> int main() { QMap<int,QStrin ...

  9. Linux 64位下一键安装scipy等科学计算环境

    Linux 64位下一键安装scipy等科学计算环境 采用scipy.org的各种方法试过了,安装还是失败.找到了一键式安装包Anaconda,基本python要用到的库都齐了,而且还可以选择安装到其 ...

  10. 1068. Find More Coins (30)

    题目如下: Eva loves to collect coins from all over the universe, including some other planets like Mars. ...