我们现在UAT环境的app是用appcan和html5进行制作,好多朋友都在问UAT app升级如何做的
我们在zy_control.js里面会创建几个变量 version 表示是当前app 的版本号(备注 :因为zy_control 包含了appcan一些初始化代码所以基本每个页面都需要导入这个js)
在每次打开app的时候 我们在欢迎界面会调用appcan widgetOne 获取平台性 判断当前手机是IOS 还是安卓
uexWidgetOne.getPlatform();//获取平台版本 (step:1)
uexWidgetOne.cbGetPlatform = function(opId, dataType, data)
{
var update = 0;
if (data == 1)
{
update = 1;
} else
{
//我是IOS
update = 2;
}
setstorage("sysos",update);//把当前的手机型号存入缓存
$.ajax({
type: 'GET',
url: ApIp + "/ManagerDemo/app/update.do?type=" + update,
dataType: 'json',
timeout: 20000,
error: function(){
msgPrompt(getLang("wlanError"))
},
success: function(data){
console.log(data)
if (data.msg == 10000)
{
return;
}
updateUrl = data.appUrl;
setstorage('updateUrl', updateUrl);
setstorage("remoteVersion", data.version);//
}
});
};
然后发起请求到后台获取最新版本号根据传入类型 获取最新版本号 然后获取到版本号 存入缓存
setstorage("remoteVersion", data.version);//
当用户在点击功能时候 根据当前的版本号 和远程版本号 不一致进行下载操作 IOS 必须要跳转到URL进行安装
checkLogin:function (){
var url=getstorage("updateUrl");
if (menu.remoteVersion != null ) {
if (menu.remoteVersion != version) {
uexWindow.cbConfirm = function(){
switch(index_content.os){
case 1:
beihai365_app_update();
break;
case 2:
uexWidget.loadApp(url,null,null);
}
};
uexWindow.confirm(getLang("sureMsg"), getLang("suerToUpdate"), [getLang("sure"), getLang("nosure")]);
return false;
}
}
return menu.judgeSessionId();
}
function beihai365_app_update(){
var flag_sdcard = 1;
var fileName = 'AppPer.apk';//新版本文件名
var updateurl = getstorage("updateUrl")+fileName;//下载新apk文件地址
var filepath2 = "/sdcard/";//保存到sd卡
var platform1 = '';//平台版本
//var update_msg = "当前有新版本,是否更新?"; //提示文字
//安卓版 ,显示下载进度 (step:7)
uexDownloaderMgr.onStatus = function(opId, fileSize, percent, status) {
if (status == 0) {
// 下载中...
//alert('download percent ' + percent + '%');
uexWindow.toast('1', '5', '下载进度:' + percent + '%', '');
} else if (status == 1) {// 下载完成.
uexWindow.closeToast();
uexDownloaderMgr.closeDownloader('14');//关闭下载对象
//localStorage.clear();
//alert(filepath2+fileName);
uexWidget.installApp(filepath2+fileName);// 安装下载apk文件
} else {
uexDownloaderMgr.closeDownloader('14');//关闭下载对象
//uexWindow.toast('1', '5', '请确保SD卡可正常使用.', '');
}
};
//安卓版 ,创建下载对象回调函数(step:6)
uexDownloaderMgr.cbCreateDownloader = function(opId, dataType, data) {
//alert('uexDownloaderMgr.cbCreateDownloader data='+data);
if (data == 0) {
//updateurl是通过调用cbCheckUpdate回调后,放入全局变量的
uexDownloaderMgr.download('14', updateurl, filepath2+fileName, '0');//开始下载apk文件
} else if (data == 1) {
;
} else {
;
}
};
//检查是否已经存在sd卡的回调函数(step:3)
uexFileMgr.cbIsFileExistByPath = function(opCode, dataType, data) {
//alert('uexFileMgr.cbIsFileExistByPath flag_sdcard='+flag_sdcard+' , data='+data);
if (flag_sdcard == 0) {
if (data == 0) {
scscms_alert(getLang("SDCard"), getLang("sure"));
// alert('请检查手机的sd卡是否正常');
} else {
if (platform1 == 1) {
//安卓版更新,通过创建下载对象进行下载
uexDownloaderMgr.createDownloader("14");
}else if(platform1 == 0){
//苹果更新
// uexWidget.loadApp("", "", updateurl);
}
}
}
};
//获取平台版本回调函数,确定是客户端是那个平台的客户端 (step:2)
uexWidgetOne.cbGetPlatform = function(opId, dataType, data) {
//alert('b');
//获取系统版本信息回调函数
platform1 = data;
//alert(platform1);
console.log(platform1);
if (data == 1) {
// 是android
flag_sdcard = 0;
uexFileMgr.isFileExistByPath('/sdcard/');//先判断是否存在sd卡,再调用checkUpdate来进行更新
}else if(data == 0){
//alert("我是IOS");
//uexWidget.checkUpdate();
}
};
uexWidgetOne.getPlatform();//获取平台版本 (step:1)
}
备注:appcan 以前确实不稳定 但是现在目前版本还是非常稳定。非常感谢appcan对我们技术的support,目前我们的app快超过千人使用
升级功能比较稳定。