基于Adobe AIR的社交應用開發及案例研究
這里是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組件:
然后,你可以在應用的初始化階段(例如監聽creationComplete事件)調用上面的組件發出GET請求,請求可以通過URLVariables攜帶參數:
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 組件。
通過使用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在移動平臺上能有更佳的表現!
有興趣的讀者可以到一端網絡下載作者開發的其他社交應用軟件。