筋斗云框架:Cordova高级玩法之容器内容分离技术

筋斗云框架可以用来做安卓或IOS的原生应用,以便用户能更快捷的打开应用以及使用手机提供的诸如摄像头、麦克风等各种原生设备功能,提供更友好的用户体验。
使用筋斗云框架制作的应用与原生应用有所区别,一般称为混合应用,它通过Cordova工具包生成Web应用容器,加载前端Web应用作为“内容”,Web应用通过调用容器接口(一般也称插件)来操作原生窗口。

通常的混合应用要将网页内容内嵌入容器打包发布,Web应用有任何改动,都需要重新打包发布新版本。
筋斗云采用容器与内容分离技术,可以极大的减少原生版本发布次数,避免上传应用市场及审核带来的不便。

这一技术的核心是解决两个问题:1. Web应用与容器分离后,如何调用容器功能。2. Web应用修改更新后,如何兼容市场上仍存在的各种老版本容器。

首先,Web应用与容器分离后,对容器接口的调用会失败。其原因是缺少容器的支持库,包括基础库(如cordova.js)以及各接口声明文件。这些支持库可以从各平台的安装包中分离出来放入Web应用中,并由Web应用的主引导页面根据当前平台是IOS或安卓,自动加载相应的平台容器支持库。

一般需要从安装包中分离出以下文件:

cordova.js
cordova_plugins.js
plugins/ (文件夹)

将它们放到Web应用中。注意:每个移动平台上的文件都是不一样的,需要分别放到不同的文件夹:安卓存放到文件夹 m/cordova 中,IOS存放到 m/cordova-ios 中。

其次,当为容器增加新插件功能后,就必须考虑对旧版本的容器的兼容,因为即使新的应用上架后,用户也不一定能立即升级到最新版本。这样,最新的Web应用上线后,如果运行在老版本的容器中,对新插件的调用就会失败。
解决方法是引入版本管理机制,根据不同容器版本,动态加载该版本可用插件。此外,由于不同的应用(比如客户端,商户端)会共用这些的支持库,必须为每个应用创建标识,再按不同应用的不同版本加载插件。

我们先在cordova_plugins.js中为每个插件增加一个filter属性,配置它可用于哪些应用的哪些版本,像这样:

// 应用标识:user表示客户端,store表示商户端
var plugins = [
    {
        "id": "cordova-plugin-inappbrowser.inappbrowser",
        ...
        "filter": [ ["user", 2], ["store", 1, 3]
    }
    ...
]

属性filter的格式为[ [{app}, {verFrom}, {verTo?} ], ... ]. 以上filter的含义即是,客户端从版本2开始支持该插件,商户端从版本1到版本3支持该插件(版本4开始该插件不再使用)。

容器需要将当前版本传给应用程序,目前是通过在加载Web应用时,在URL中增加cordova参数来实现的,如cordova=3表示容器版本为3. 这样每个Web应用根据自己的应用标识与传入的版本号,对这些filter进行分析,就可以计算出可用的容器接口。

有了内容与容器分离机制后,一般只有在插件接口增删的情况下才需要到应用市场上发布新版本,而Web应用随时可以自主更新线上版本,即永远是最新版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值