摘要:介紹了Google Android架構(gòu)和如何進(jìn)行Web交互,探討在Android平臺(tái)上的企業(yè)應(yīng)用如何通過(guò)webservice訪問(wèn)企業(yè)內(nèi)網(wǎng)信息及保護(hù)內(nèi)網(wǎng)信息的安全性。
關(guān)鍵詞:Android;webservice;java;內(nèi)網(wǎng)
中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 18-0000-02
1 Android平臺(tái)
Android是2007年google公司發(fā)布的一個(gè)操作系統(tǒng),其基于Linux系統(tǒng)并且源碼開(kāi)放;便于后來(lái)者自行修改底層及開(kāi)發(fā)各類插件,大量應(yīng)用于移動(dòng)設(shè)備如手機(jī)和平板電腦等。中文名大部分都稱其為“安卓”系統(tǒng)。Android的主要競(jìng)爭(zhēng)對(duì)手是蘋果的ios系統(tǒng)。目前Android在全球的市場(chǎng)占有率位居第一。目前已占據(jù)全球手機(jī)操作系統(tǒng)大約60%的份額,其中以2.3版本的android系統(tǒng)占有率最高。
隨著移動(dòng)終端計(jì)算能力與存儲(chǔ)能力的日益增強(qiáng)以及移動(dòng)通信技術(shù)與互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,基于移動(dòng)終端的應(yīng)用所占的比重越來(lái)越大,尤其是當(dāng)Android開(kāi)發(fā)平臺(tái)出現(xiàn)后,基于移動(dòng)終端的開(kāi)發(fā)門檻出現(xiàn)了劃時(shí)代意義上的降低。
作為一個(gè)源碼開(kāi)放的手機(jī)平臺(tái),它的開(kāi)放性使其不受軟件專有權(quán)的限制。目前3g網(wǎng)絡(luò)大量普及,各版本android系統(tǒng)的手機(jī)也大量面市。另一方面,webservice也是目前互聯(lián)網(wǎng)應(yīng)用技術(shù)的一個(gè)非常普及和便捷的手段。手機(jī)平臺(tái)和web service技術(shù)的結(jié)合,是目前主流解決傳統(tǒng)平臺(tái)到移動(dòng)終端遷移的有效手段。因此本文討論和實(shí)現(xiàn)android平臺(tái)通過(guò)調(diào)用遠(yuǎn)程web service實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)以及將該技術(shù)應(yīng)用到企業(yè)應(yīng)用的開(kāi)發(fā)中。
2 架構(gòu)
手機(jī)端應(yīng)用android系統(tǒng)作為底層平臺(tái),通過(guò)調(diào)用服務(wù)器端發(fā)布的web service服務(wù)訪問(wèn)服務(wù)器數(shù)據(jù)并展現(xiàn)于手機(jī)端。
2.1 Android應(yīng)用程序組件
Android系統(tǒng)的基本組件包括Activity(活動(dòng))、Service(服務(wù))、Broadcast Receiver(廣播接收者)和Content Provider(內(nèi)容提供者)等,此外還包括專門負(fù)責(zé)在基本組件之間傳遞消息的Intent(意向)組件。
2.2 Web Services
Web Service是一種兩個(gè)電子設(shè)備通過(guò)互聯(lián)網(wǎng)實(shí)現(xiàn)相互訪問(wèn)的方法,W3C定義Web Services是基于網(wǎng)絡(luò)的實(shí)現(xiàn)機(jī)器到機(jī)器互訪的軟件系統(tǒng)。Web Services可以將本地應(yīng)用服務(wù)轉(zhuǎn)換為網(wǎng)絡(luò)應(yīng)用服務(wù),他使用XML來(lái)編解碼數(shù)據(jù),并使用SOAP來(lái)傳輸數(shù)據(jù);同時(shí)不受設(shè)備和底層系統(tǒng)的限制,實(shí)現(xiàn)與平臺(tái)和編程語(yǔ)言無(wú)關(guān)的方式相互通信。
3 設(shè)計(jì)思路
目前一些企業(yè)因?yàn)榘踩矫娴目紤],將企業(yè)內(nèi)部的發(fā)布和辦公系統(tǒng)建立在內(nèi)網(wǎng),使得出差或者異地辦公員工訪問(wèn)內(nèi)網(wǎng)系統(tǒng)十分不便;同時(shí)考慮到移動(dòng)終端設(shè)備的大量普及,可以用移動(dòng)終端通過(guò)webservice訪問(wèn)企業(yè)的內(nèi)部數(shù)據(jù),而該方法只需要開(kāi)發(fā)企業(yè)應(yīng)用服務(wù)器的webservice端口到外網(wǎng)就可以,能大大保證內(nèi)網(wǎng)數(shù)據(jù)的安全,同時(shí)兼顧員工在公司外的訪問(wèn)需求。
4 功能模塊
功能簡(jiǎn)單劃分為:登錄、內(nèi)網(wǎng)新聞、公司通告、請(qǐng)假申請(qǐng)和工資查詢
這幾個(gè)功能為平時(shí)常用的而且不在公司時(shí)經(jīng)常需要訪問(wèn)和申請(qǐng)的項(xiàng)目;每個(gè)功能模塊對(duì)應(yīng)服務(wù)器web service端的一個(gè)方法和相應(yīng)參數(shù);手機(jī)端后服務(wù)器端通過(guò)得到的參數(shù)處理返回需要的內(nèi)容;
例如:新聞或公告返回標(biāo)題列表和id;手機(jī)端在Android的view List組件中呈現(xiàn)內(nèi)容;點(diǎn)擊每個(gè)標(biāo)題后web service通過(guò)d返回新聞或公告的詳細(xì)內(nèi)容給手機(jī);手機(jī)端通過(guò)text view組件即可展現(xiàn)新聞或公告的詳細(xì)內(nèi)容了。
工資查詢返回最近幾個(gè)月的工資列表,點(diǎn)擊后可以進(jìn)入查詢每月工資的明細(xì)。請(qǐng)假申請(qǐng)則是從手機(jī)端選擇要請(qǐng)假的日期和請(qǐng)假類型后,提交給指定審批人;將這些信息通過(guò)webservice傳給內(nèi)網(wǎng)辦公系統(tǒng),之后服務(wù)器端生成請(qǐng)假審批信息;實(shí)現(xiàn)移動(dòng)客戶端的辦公業(yè)務(wù)。
5 設(shè)計(jì)步驟
在Android SDK中并沒(méi)有提供調(diào)用WebService的庫(kù),因此,需要使用第三方的SDK來(lái)調(diào)用WebService。PC版本的WebService庫(kù)非常豐富,但這些對(duì)Android來(lái)說(shuō)過(guò)于龐大。適合手機(jī)的WebService客戶端的SDK有一些,比較常用的是KSOAP2。
利用ksoap2-android在Android平臺(tái)上調(diào)用Web Services的步驟如下:
(1)設(shè)定Web Services的命名空間和調(diào)用的方法名稱,關(guān)鍵的代碼如下:
import org.ksoap2.serialization.SoapObject;
private static final String NAMESPACE = \"http://WebXml.com.cn/\";
private static final String METHOD_NAME = \"getWeatherbyCityName\";
SoapObject request = new SoapObject(NameSpace, MethodName);
SoapObject類的第一個(gè)參數(shù)表示W(wǎng)ebService的命名空間,可以從WSDL文檔中找到WebService的命名空間。
(2)設(shè)定方法的參數(shù)值:
request.addProperty(\"param\",\"value\");
比如我們需要調(diào)用企業(yè)內(nèi)網(wǎng)新聞、企業(yè)內(nèi)網(wǎng)公告和員工工資信息等等
第一步我們需要輸入員工的內(nèi)網(wǎng)用戶名和密碼完成登錄,則需要傳遞用戶名和密碼給服務(wù)器端的webservice
request.addProperty(\"username\", username);
request.addProperty(\"password\", password);
(3)生成調(diào)用WebService方法的SOAP請(qǐng)求信息,并指定SOAP的版本:
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
(4)使用getResponse方法獲得WebService方法的返回結(jié)果
H SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
已登錄為例,服務(wù)器端webservice通過(guò)傳遞到的用戶名和密碼參數(shù)到服務(wù)器數(shù)據(jù)庫(kù)驗(yàn)證是否為合法用戶,返回ture或1,手機(jī)端收到返回結(jié)果判斷是否允許登錄。當(dāng)然,在傳遞密碼時(shí)一般的做法是通過(guò)MD5加密傳遞。
6 結(jié)束語(yǔ)
該方案很好地利用了Android平臺(tái)的優(yōu)勢(shì),比起基于WAP瀏覽器、基于J2ME、以及蘋果公司的iphone開(kāi)發(fā)平臺(tái)來(lái)說(shuō),開(kāi)發(fā)的難度是最低的,并且因?yàn)锳ndroid平臺(tái)的完全開(kāi)源,開(kāi)發(fā)的成本要低很多,比企鵝滿足移動(dòng)辦公和瀏覽的同時(shí)保證了內(nèi)網(wǎng)服務(wù)器的安全。
參考文獻(xiàn):
[1]Android SDK Document[EB/OL].
[2]http://developer.android.com/guide/index.html.
計(jì)算機(jī)光盤軟件與應(yīng)用2012年18期