关于appcan自动升级功能

我们现在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快超过千人使用
升级功能比较稳定。
时间: 2024-11-10 01:25:22

关于appcan自动升级功能的相关文章

自动升级功能

最近做一个项目需要自动升级功能.需要从IIS服务器下载文件夹下的升级程序,报如下错误: 远程服务器返回错误:(404)未找到. 原因是:IIS服务器过滤了此文件的下载. 解决方法如下: 1.在IIS中找到MIME类型. 2.在MIME类型中,增加静态文件扩展名为.fr3文件的 传送到浏览器(或客户端)内容格式定义即可.如下图

VFP开发的C/S模式的程序如何实现自动升级功能

最近用VFP开发了一个C/S模式的信息管理系统,由于公司有自己的VPN网路,系统的用户遍布国内外,所以急需要开发一个实现自动升级功能,这样我就可以随时发布信息的补丁包和新开发的功能了. 具体代码要结合程序. 一般这样: 程序A.EXE 和 程序B.EXE (为直正的程序) 1.由 程序A.EXE 连接数据库 2.由 程序A.EXE 取得数据库中 程序B.EXE 的版本(这个版本是在将最新的 程序B.EXE 写入数据库时一同写入的) 3.由 程序A.EXE 取得 程序B.EXE 的版本,如果本地

SNFAutoupdater通用自动升级组件V2.0

1.组件介绍 C/S构的特点是能充分发挥客户端的处理能力,很多工作可以由客户端处理后再提交给服务器,对应的优点就是客户端响应速度快模式客户端以其强大的功能,丰富的表现力受到相当大部分用户的青睐,但是客户端布署,维护升级的成本却是非常的高的. C/S客户端需要安装专用的客户端软件及运行环境.首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒.硬件损坏,都需要进行安装或维护.特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题.还有,系统软件升级时,每一台客户机需要重新安装,其维护和

C#实现自动升级(附源码)

对于PC桌面应用程序而言,自动升级功能往往是必不可少的.而自动升级可以作为一个独立的C/S系统来开发,这样,就可以在不同的桌面应用中进行复用.本文将着重介绍OAUS的相关背景.使用方法,至于详细的实现细节,大家可以直接下载源码研究.如果了解了OAUS的使用,源码的理解就非常容易了.如果需要直接部署使用自动升级系统,那么,可下载文末的可执行程序压缩包. 一.OAUS的主要功能 目前主流的程序自动升级策略是,重新下载最新的安装包,然后重新安装整个客户端.这种方式虽然简单直观,但是缺陷也很明显.比如,

自动升级系统的设计与实现(源码)

对于PC桌面应用程序而言,自动升级功能往往是必不可少的.而自动升级可以作为一个独立的C/S系统来开发,这样,就可以在不同的桌面应用中进行复用.基于ESFramework的文件传送功能,我实现了一个可直接复用的自动升级系统OAUS,现在将其分享给大家.这篇文章将着重介绍OAUS的相关背景.使用方法,至于详细的实现细节,大家可以直接下载源码研究.如果了解了OAUS的使用,源码的理解就非常容易了.如果需要直接部署使用自动升级系统,那么,可下载文末的可执行程序压缩包. 一.OAUS的主要功能 目前主流的

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

前段时间做了一个工具发布给公司的各部门使用后反馈了不少BUG,每次修改后均需要发邮件通知各用户替换最新版本,很不方便,因此后来就写了一个自动升级的功能,这样每次发布新的版本时只需要将其部署到自动升级服务器上,工具使用用户运行工具时就会连接到自动升级服务器,检查是否有版本更新,如果有则完成更新后再运行最新版本,否则就运行当前工具版本. 为了使这个自动升级模块具有通用性,我将其做成可以单独运行的程序,而并非集成到工具中,这样则可以为各类软件提供自动升级的功能.自动升级模块采用SOCKET方式实现升级

C# Xamarin For Android自动升级项目实战

一.课程介绍 "明人不说暗话,跟着阿笨一起玩Xamarin",本次分享课程阿笨将带来大家一起学习Xamarin For Android系列<C# Xamarin For Android自动升级项目实战>.如果您同样对本次分享课程感兴趣的话,那么请跟着阿笨一起学习吧. 本次分享课程适合人群如下: 1. 热爱Xamarin跨平台移动开发. 2.进一步了解和学习Xamarin For Android移动开发实战知识. 本次分享课包含实战分享知识点如下: 1.C# Android 

HTML5进阶 二 HBuilder实现软件自动升级

HBuilder实现软件自动升级 前言 移动APP开发好后需要实现软件自动升级功能,经过一番搜索,发现HBuilder具有"App资源在线升级更新"的功能,遂研究之. 经过一番测试,在源码思想的基础之上对其进行了优化.代码如下: var wgtVer = null; function plusReady(){ // 获取本地应用资源版本号 plus.runtime.getProperty(plus.runtime.appid,function(inf){ wgtVer=inf.vers

自动升级系统的设计与实现(续2) -- 增加断点续传功能 (附最新源码)

一.缘起 之前已经写了两篇关于自动升级系统OAUS的设计与实现的文章(第一篇.第二篇),在为OAUS服务端增加自动检测文件变更的功能(这样每次部署版本升级时,可以节省很多时间,而且可以避免手动修改带来的错误)后,有部分使用者又提出了一个很好的建议:为OAUS增加断点续传功能.因为如果网络状态不是很好,就经常会在升级到一半的时候,由于OAUS客户端掉线而导致升级失败,这个时候,就必须重新开始整个升级过程.即使升级中断的时候,已经完成了99%,也必须重头再来.所以,为OAUS增加断点续传功能是非常必