AppWorker教程-应用升级

应用升级

AppWorker平台的应用升级包含二种升级方式,一种是最常用的安装包的升级,另外一种是应用内升级。很显然第二种升级方式更灵活。

注意:这2种升级是完全不相关的,没有任何关联的。包括版本号,包括升级服务端都是2套体系,大家不要混在一起。

应用安装包升级

原生应用通常的升级方式就是这种,比如android的安装包是apk文件,ios的安装包是ipa文件。如果要升级,只能重新下载一个新的apk/ipa文件,然后安装覆盖旧的版本,基本流程如下:

1.调用do_Global.getVersion()方法检查当前应用的版本号
通过do_Http发送GET/POST请求升级服务端,请求当前应用的最新的版本号,这个服务端是开发者自己搭建,和Do平台无关。
2.比较这二个版本号,如果不一样,则调用do_External.openURL()方法使用操作系统带的浏览器打开下载应用的网页。在网页上下载安装新的应用覆盖旧的应用。

这里要注意的是:

  1. 如果要生成一个特定版本号的App,需要在应用配置-平台配置-版本的地方设置一下版本号,然后再打一个发布版本。
    image
  1. 还有就是如果在新版本的应用里更新了一个组件的版本,或者增加了某个组件,应用安装包升级是必须的过程,这相当于功能的更新。不能使用应用内升级。
  1. 苹果App Store将向用户自动提示更新,新提交审核版本如果保留检查更新入口审核时将被拒绝。所以如果想发布到组件商店上,是不允许使用程序检测版本号来升级,只能用iOS自带的操作系统的升级管理。否则不能上Appstore。但是如果是用企业证书,不受这个限制。

升级的过程比较简单,我们就不提供示例代码了。

应用内升级

应用内升级并不是AppWorker平台的特有功能,但是AppWorker平台使用应用内升级还是很方便的。
有二种方法

1. 直接下载ui和ui.js或者其它项目文件到data:// 目录下,直接使用,这个很方便,但是缺点是代码不会加密,适合放一些不核心的页面。

2. 下载到data:// 目录下,但是替换现有的source下的项目文件。

检查当前应用的版本号,这个版本号可能是从文件里读出来的,可能是从SQLite数据库读出来的,反正这个版本的读和写都是由用户来决定。
通过do_Http发送GET/POST请求升级服务端,请求当前应用的最新的版本号,这个版本号是指应用内源代码的版本号,服务端是开发者自己搭建,和Do平台无关,而且版本号的维护也是由开发者来决定。
比较这二个版本号,如果不一样,则调用do_Http.download方法下载升级包,通常是一个zip文件。
下载后,解压这个zip文件到data:// 下一个目录
利用do_App的update方法拷贝所有的最新文件拷贝到source:// 下对应的目录,覆盖旧的文件。并更新新的版本到文件或数据库。

这里要注意的是:
1.升级的页面只有再次打开才能看到变化,比如当前页面更新了,需要退出这个页面再打开才能看到变化(这个退出不是指重启app,指closePage再openPage就可以)。假如升级的是首页,则需要退出应用重新打开App了(这个需要重启app,因为首页没法再closePage了)。

2.如果选择了代码加密,则更新的文件也必须是加密过,而且是同样的AppWorker开发者账号下的同样的应用id。目前还没有提供一个方便的方式随意加密任何源代码,只能重新打包,再从打出的包扣出相应的加密过的代码。比如可以修改代码后,再打一个android的apk包,把apk改成zip解压后,再找到assests目录,这个目录下有修改后且加密后的代码了。把这些代码扣出来,做为update.zip部署在你自己的应用内升级服务器上。
参考一个示例Demo,主要的源代码如下:

var button = ui("do_Button_1");
button.on("touch", function() {
    upgrade();
});

function upgrade() {
    // 获取当前应用的版本号
    var current_version = storage.readFileSync("data://version.txt");
    // 获取服务端最新的版本号,并下载升级
    // 因为没有搭建一个真正的升级服务,所以先注释这一行且直接调用update方法
    // getLatestVersion(current_version);
    update("1.1", "data://update.zip");

}

// 从服务器上获取最新的版本号
function getLatestVersion(ver) {
    var http = mm("do_Http");
    http.method = "GET";
    http.url = "http://www.xxxx.com/getLatestVersion?current=" + ver;

    http.on("success", function(d) {
        // 服务端判断最新的版本不等于当前的版本就会返回一个最新版本和下载地址,否则返回空
        if (d) {
            // 开始下载最新zip
            download(d);
        } else
            nf.alert("当前版本已经是最新版本");
    });
    http.request();
}

// 从服务器上获取最新的升级包
function download(d) {
    var http = mm("do_Http");
    var zip = "data://update.zip";
    http.method = "POST";
    // d.downlaodURL是zip的下载url,d.version是最新的版本号
    http.url = d.downloadURL;

    http.on("success", function(d) {
        update(d.version, zip);
    });
    http.download(zip);
}
// 解压,然后覆盖旧的文件,然后更新本地版本号
function update(ver, zip) {
    storage.unzip(zip, "data://update", function(data) {
        // 这里可以拷贝文件,也可以拷贝目录
        app.update([ "data://update/test.ui", "data://update/test.ui.js" ],
                "source://view", function() {
                    nf.alert("升级完成");
                    storage.writeFile("data://version.txt", "1.1",function(){
                        app.closePage();
                    });
                });
    })
}

这个示例的下载参考这里

补充说明

自己开发的项目里包含的所有js文件打包发布版的时候缺省会加密,文件名不变,但是内容都不可读了。
所以你应用内升级必须也用一个加密过的js去覆盖旧的。目前没有提供一个简单的方法直接加密文件,

  1. 修改了项目文件后,再次提交发布版打包,然后用电脑下载打包后的apk文件
  2. 把apk改成zip,然后解压这个zip到本地
  3. 打开目录找到assest/appworker,里面都有加密过的文件
  4. 把里面的文件压缩为zip作为应用内升级的升级包,注意里面有一个很长的id的目录不需要。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容