BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

基于Adobe AIR的社交应用开发及案例研究

| 作者 饶侠 关注 0 他的粉丝 发布于 2010年12月8日. 估计阅读时间: 13 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

这里是Adobe官方网站对于AIR的介绍:

Adobe® AIR® 运行时使开发人员能使用 HTML、JavaScript、Adobe Flash® Professional 软件和 ActionScript® 构建 Web 应用程序,这些应用程序可以作为独立的客户端应用程序运行并且不受浏览器的约束。Adobe AIR 作为 Flash Platform 的一个关键组件,为跨设备和平台交付应用程序提供了一个一致、灵活的开发环境,使设计人员和开发人员能完全释放自己的创意。现在提供 AndroidΤΜ BlackBerryΤΜ Tablet OS 和 iOS* 移动操作系统及电视支持。

MixMatchMusic首席执行官兼共同创始人,MobBase 移动应用程序服务开发人员,Charles Feinn,这样评价Adobe AIR:

借助 Adobe AIR,我们将相同的代码用于桌面、Tablet 和智能手机,这不仅为我们节省了时间和资金,还提供了部署效率。我们随后可以快速、有效地通过 Adobe 的应用程序分发服务 Adobe InMarket 分发这些应用程序。

Emantras Inc. 首席执行官,Sesh Kumar也给Adobe AIR不错的评价:

使用 Adobe AIR 和 Flash Platform 创建应用程序的投资回报和资源节省真正扭转了形势。AIR 是唯一可用的解决方案,它允许您通过重用代码瞄准智能手机、Tablet、台式机和电视。通过多种设备提供电子教学内容的能力令几乎所有人都能进行学习。

Adobe AIR诞生数年来,已经从1.0版本升级至如今的2.5版本,产品日趋成熟,其跨平台理念也从电脑桌面扩展到了移动平台,包括Android系统、iOS系统、黑莓系统等等。

目前在各个领域已经涌现出了许多优秀的使用Adobe AIR技术开发的客户端软件,例如在社交应用领域,就有著名的TweetDeck,Twhirl,Spaz,Seesmic Desktop等等。他们可以支持Twitter, Facebook,FriendFeed,Myspace等国外常用的社交网站。

笔者是一位JavaEE和Flex开发者,但曾经做过Web设计师的工作。在使用如上社交应用的同时,笔者发现中国相应的应用非常稀少,因此萌生了为中国现有的社交网站开发应用的想法。目前笔者开发的豆瓣网应用DoubanTalk、豆瓣桌面客户端以及新浪微博客户端都受到了网友的热烈欢迎。

Adobe AIR可谓是开发社交应用的首选。首先,你可以使用Html、Javascript、ActionScript以及Flex进行开发,这比传统的基于C++、VB、Java语言的桌面应用的开发速度快了许多倍。其次,借助于Flash技术,你可以设计出极为炫目和体验极佳的用户界面,而传统桌面应用开发技术需要耗费大量精力才能做到。再次,Adobe AIR的跨平台特性为你省去了开发多平台版本软件的麻烦,最新的Adobe AIR甚至支持在手机平台运行,真正做到了“一处编写,处处运行”。

当然,笔者也考虑过使用SilverLight与WPF技术进行类似开发。虽然C#语言在与原生操作系统交互上更胜一筹,但是笔者后来还是放弃了。首先因为利用WPF技术开发的应用需要.NET Framework,这一运行时安装起来极其麻烦和费时,用户体验非常不好(尤其是WindowXP操作系统),而自带此运行时的Windows7操作系统目前的普及率并不算高。再次,.NET Framework运行时的跨平台特性做的远不如Adobe AIR成功,而这一点对于社交应用是至关重要的。

当然,AIR最大的劣势就是不能原生地与操作系统交互。因此,用AIR开发本地特性比较多的应用是没有多大优势的。然而,对于本地特性使用很少的社交应用来说,AIR自带的本地接口以及AIR2.0提供的本地程序调用接口(NativeProcess)已经完全够用了。

这里笔者提供一个具体案例——DoubanTalk,来说明如何使用Adobe AIR进行社交应用开发。

开发需求

豆瓣网是目前中国比较热门的社交网站,它提供一种类似Facebook和Twitter形式的社区交流形式,但是是非实名的,另外它还是著名的书评、影评、乐评网站。豆瓣网开放了有限的基于OAuth的API,调用方法是REST形式。豆瓣网目前的应用还比较贫乏,现有的应用也不够成熟和易用。

社交应用的吸引力在于给使用者带来不同于网页版本的方便快捷,以及创新的功能。

笔者开发应用的初衷便是希望提供一个这样的应用:能够完成豆瓣的基本功能;能够进行友邻广播的过滤和自动提醒;能够查询书影音信息并查看评论;还能够搜索书影音条目的下载地址。

最终的应用版本基本实现了上述功能,并加入了众多豆瓣网页没有的创新点,例如可以转发我说和日记;可以同步显示豆瓣电台歌词;可以查看同城天气预报等等,这些创新点也是该应用受到热烈欢迎的原因。

应用截图如下:

你可以从这里下载该应用。

实现概览

笔者采用了Flex3.5来开发此AIR应用。相对于使用JavaScript和Flash Professional软件,Flex提供了易于维护和方便开发的XML标记语言——MXML语言。ActionScript是核心的Flash Player编程语言,而MXML是建立在其基础上的一个抽象。另外,Flex提供的各类标准组件大大加快了开发速度。

豆瓣网提供了REST形式的API,返回结果有两种,JSON和XML。对于第一种返回结果,可以使用Adobe官方提供的as3corelib库来进行解析;对于XML形式的返回结果,ActionScript3.0自带的e4x语法已经非常强大,解析XML非常方便。

部分API访问前需要进行OAuth认证,可以去Google上搜索相应语言对应的OAuth库。

在用户数据存储和离线数据存储方面,该应用采用了Adobe AIR自带的Sqllite本地数据库来储存用户数据。针对于Sqllite数据库的数据持久化,可以采用一些持久化框架,也可以自己编写Sql语言来实现。

当然,如果数据格式不是太复杂,也可以采用文本文件或者XML文件来进行数据存储。

实现细节

这里以应用的一项基本功能——获取最新友邻广播列表来进行说明。获取列表信息需要向豆瓣API服务器发出GET请求,而通过Flex的HTTPSerivice组件可以非常方便的发出GET请求。

首先,我们需要声明一个Flex HTTPSerivice组件:

<mx:HTTPService id="miniblogSrv" result="miniblogSrv_result_hander(event)" fault="faultHander(event)"/> 

然后,你可以在应用的初始化阶段(例如监听creationComplete事件)调用上面的组件发出GET请求,请求可以通过URLVariables携带参数:

var params : URLVariables = new URLVariables(); 
params['start-index'] =1; 
params['max-results'] =20; 
var url : String = generalGetURL("http://api.douban.com/people/"+douban_id+"/miniblog/contacts",params); 
miniblogSrv.url = url; 
miniblogSrv.send(); 

通过声明上面的miniblogList为[Bindable],返回结果可以与某个Flex数据集组件绑定,例如MX:list 组件。

<mx:List width="100%" height="100%" dataProvider="{ miniblogList}"/> 

通过使用Flex的itemRenderer技术,可以针对列表单元项进行个性化定制;而通过ActionScript3.0中的Timer类,可以进行定时查询以完成广播的自动提醒。

通过使用ActionScript3.0中的URLLoader和URLRequst类可以方便的完成POST、DELETE、PUT请求,这里不再赘述。

当然,以上只是一个非常简单的例子以用来展示如何使用Adobe AIR来完成基本的REST操作。笔者给出的建议是尽量将返回的XML数据映射为ASObject实体,这样更方便之后的维护;另外可以采用常用的Flex框架进行开发,例如Cairngorm、Mate、Robotleg等等。

如何发布和部署

Adobe AIR提供了良好而方便的发布、部署和更新机制。

如何发布?如果你使用的是Adobe Flash Builder开发应用,很简单,只需要导出Release Build即可;如果你所用的工具并未自带打包功能,你也可以通过AIR SDK中的ADT命令行参数进行打包。

如何部署?用户只需要安装了Adobe AIR运行时,即可通过下载你发布的打包文件非常方便的安装程序。当然,你可以可以通过使用Adobe AIR Express Install Badge技术提供用户在线安装的版本,这样用户可以直接在网页上点击一下完成AIR运行时和AIR应用的同时安装。AIR安装文件通常非常小巧,安装过程也很快速。

如何自动更新?Adobe AIR自带的自动更新机制非常好用,只需在远程服务器发布一个符合自动更新格式的XML文件即可,应用会在每次启动时自动检查和安装更新程序。当然,开发过程中你也可以使用一些开源的自动更新库。

结论

使用Adobe AIR技术进行社交应用的开发,不论是开发速度、界面效果,还是跨平台性,都远远超过其他的桌面软件开发技术。当然,AIR在游戏、视频、3D等方面更是有着Flash平台得天独厚的优势。目前AIR已经初步支持了Android等移动操作系统,让我们期待Adobe AIR在移动平台上能有更佳的表现!

有兴趣的读者可以到一端网络下载作者开发的其他社交应用软件。

关于作者

作者是一位经验丰富的开发者,在Web前端、Web后端、RIA等方面都有一些研究。在来到Adobe之前,他曾经担任过Web设计师、Flash设计师、JavaEE工程师、项目架构师等工作。最近他在忙于构建一个统一的社会化应用网络。更多信息可以访问:一端网络


感谢崔康对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT