1.需要在AppCan项目的config.xml文件中设置“更新地址”,即在执行uexWidget.checkUpdate();时访问的后台页面地址,比如:

  http://192.168.0.10:8888/XXXX/servlet/CheckUpdateServlet

2.在后台CheckUpdateServlet.java文件中

  A.获取移动端自带的两个参数:ver,platform

  String oldVer = request.getParameter("ver");   //目前移动端app的版本号,如:00.00.0000
  String platform = request.getParameter("platform");   //移动端类型,ios:0,android:1

  B.根据官方的格式,准备最新app的数据,xml格式:  

  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = dbf.newDocumentBuilder();
  Document doc = db.newDocument();
  Element node = doc.createElement("results");

  Element node1 = doc.createElement("updateFileName");
  node1.setTextContent("xxx");  //移动端安装文件的文件名
  node.appendChild(node1);

  Element node2 = doc.createElement("updateFileUrl");
  node2.setTextContent("xxxx");  //Android:移动端安装文件在服务器上的地址,ios:移动端安装文件在AppStore中的地址
  node.appendChild(node2);

  Element node3 = doc.createElement("fileSize");
  node3.setTextContent("10000");  //移动端安装文件的大小
  node.appendChild(node3);

  Element node4 = doc.createElement("version");
  node4.setTextContent("00.00.0001");  //移动端安装文件最新版本号
  node.appendChild(node4);

  doc.appendChild(node);

  OutputFormat xmlout = new OutputFormat(doc);
  /** 设置编码方式 */
  xmlout.setEncoding("UTF-8");
  /** 保留原有的换行 */
  xmlout.setPreserveSpace(true);
  /** 采用换行缩进 */
  xmlout.setIndenting(true);
  StringWriter sw = new StringWriter();

  XMLSerializer xmlSerilizer = new XMLSerializer(sw,xmlout);
  xmlSerilizer.serialize(doc);
  retValue = sw.toString();

3.前台移动端处理服务器返回数据:

//AppCan根据后台返回的xml数据,自动转换信息

uexWidget.cbCheckUpdate = function(opCode, dataType, jsonData) {

  var obj = eval('(' + jsonData + ')');
  var tips = '';

  if (obj.result == 0) {

    updateurl = obj.url;
    var mycars = ['稍后', '更新'];
    uexWindow.confirm('', '当前有新版本,是否更新?', mycars);
  } else if (obj.result == 1) {

    tips = "Current version is the newest";
  } else if (obj.result == 2) {

  tips = "Unknow error";
  } else if (obj.result == 3) {

  tips = "Params error";
  }
}

使用AppCan自带的升级功能实现移动端升级的更多相关文章

  1. 利用其它带文件防护功能的软件防止*.asp;*.jpg写入文件。

    此木马是一个.NET程序制作,如果你的服务器支持.NET那就要注意了,,进入木马有个功能叫:IIS Spy,点击以后可以看到所有站点所在的物理路径.以前有很多人提出过,但一直没有人给解决的答案.. 防 ...

  2. Myeclipse2014 自带的报表功能 与 Eclipse BIRT

    Myeclipse2014 自带的报表功能跟 Eclipse BIRT 差不多,但不兼容   1.只能是MyEclipse Web projects 或者 Report Web project不支持B ...

  3. Ecmall系统自带的分页功能

    在Ecmall的二次开发中,分页是必不可少的.这个系统已经自带了分页功能,下面来看看如何使用这个分页. 下面是一个自定义的类,用于查看订单的详细情况.关键在于get_order_data()这个方法, ...

  4. DEDE自带的采集功能,标题太短的解决方法

    DEDE自带的采集功能,标题太短获取不全的解决方法搜索了好多之后,终于还是在dede的官方论坛找到了答案.增加采集标题长度:255  目的:原标题长度太小,影响文件采集⑴修改系统参数设置(文档标题最大 ...

  5. jQuery.YesShow - 图片轮播插件(带图片放大功能)

    jQuery.YesShow - 图片轮播插件(带图片放大功能) 使用简单,原文件只要这样就可以了:<div id="yes">         <ul> ...

  6. (转)基于企业级证书的IOS应用打包升级功能介绍

    IOS应用程序升级流程介绍:IOS手机端应用程序需要升级时,打开服务器端html文件(本文为ucab.html文件)->点击在线安装->打开plist文件(本文中为ucab.plist文件 ...

  7. NSIS:应用软件自动升级功能的探索与实践

    原文 NSIS:应用软件自动升级功能的探索与实践 记得以前轻狂曾分享过使用第三方软件实现应用软件自动升级功能 (详细http://www.flighty.cn/html/soft/20110106_1 ...

  8. DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样

    '近日有本论坛网友问:DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样 '今晚正好闲着没事,加之以前也没用到过这个需求,所以就写了个模拟功能,供各位坛友酌情参考. ...

  9. YII关联字段并带搜索排序功能

    1.简介 从接触yii框架到现在已经快有两个月了,但是自己对yii框架的了解程度并不是很深,并没有系统地去学习,仅仅只是在做项目的时候遇到不懂得知识才去翻手册. 在上一个项目中因为需要将关联的表的字段 ...

随机推荐

  1. Android动画之translate(位移动画)

    上一篇文章讲了 Android的左右滑动切换,实现过程是非常简单,一些新手可能会向深入了了解Activity切换的原理,下面主要对左右滑动进行深入的探讨,并以项目中的一个切换效果来进一步了解. Act ...

  2. 实例级别和类级别的static、构造函数、字段属性的简单介绍

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 实例级别 ...

  3. switch-case 执行顺序

    switch(expression){ case value : //语句 break; //可选 case value : //语句 break; //可选 //你可以有任意数量的case语句 de ...

  4. hdu 2570

    贪心的经典题型 该死的精度问题,WA了好几次,以后能用乘的绝不用除!! #include<iostream> #include<algorithm> #include<c ...

  5. Growing转化的每一步(笔记整理)

    渠道流量监控中,如何将劣质流量和优质流量区分开来? 劣质流量总会有有一些不同于其他正常渠道的特征,比如在同一个时间中大量集中访问.使用的硬件设备比较固定.使用特定的浏览器等. 实际案例:去年有一些 A ...

  6. DOM操作 append prependTo after before

    通过JavaScript可以很方便的获取DOM节点,从而进行一系列的DOM操作.但实际上一般开发者都习惯性的先定义好HTML结构,但这样就非常不灵活了. 试想下这样的情况:如果我们通过AJAX获取到数 ...

  7. iOS 常见 Crash 及解决方案

    一.访问了一个已经被释放的对象 在不使用 ARC 的时候,内存要自己管理,这时重复或过早释放都有可能导致 Crash. 例子 NSObject * aObj = [[NSObject alloc] i ...

  8. Java 集合系列 17 TreeSet

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  9. Objective-C:Foundation框架-常用类-NSMutableDictionary

    直接上代码吧: #import <Foundation/Foundation.h> @interface Student : NSObject @property (nonatomic, ...

  10. 使用Yeoman,Grunt和Bower开发AngularJS(译)

    使用Yeoman产生AngularJS的主要骨架 使用Grunt加速开发和帮助执行 使用Bower来加入第三方插件和框架——third party plugins/frameworks 一.准备工作 ...