摘 要 隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,越來(lái)越多用戶(hù)通過(guò)智能終端接入到移動(dòng)互聯(lián)中,在移動(dòng)客戶(hù)端開(kāi)發(fā)應(yīng)用的需求也日漸增多。而在移動(dòng)客戶(hù)端開(kāi)發(fā)的過(guò)程中,移動(dòng)端與服務(wù)器端的交互與整合是不可缺少的一環(huán)。由于當(dāng)前Android操作系統(tǒng)是較為主流的移動(dòng)操作系統(tǒng),因此本文探索了一種基于Web service的技術(shù)的Android移動(dòng)端與服務(wù)器端的整合技術(shù),并設(shè)計(jì)了比較通用的整合架構(gòu),闡述了整合過(guò)程。
【關(guān)鍵詞】Web Service Android 整合
1 Web應(yīng)用系統(tǒng)與Android移動(dòng)端的整合概述
1.1 移動(dòng)端與服務(wù)器端的整合概述
在本文所論述的Web應(yīng)用系統(tǒng)主要是指?jìng)鹘y(tǒng)的基于PC電腦端的Web應(yīng)用系統(tǒng),如網(wǎng)站,或相關(guān)的基于B/S架構(gòu)的應(yīng)用程序。由于當(dāng)前的移動(dòng)互聯(lián)網(wǎng)技術(shù)飛速發(fā)展,移動(dòng)端的用戶(hù)越來(lái)越多,越來(lái)越多人通過(guò)智能終端接入了移動(dòng)互聯(lián)網(wǎng),因此,在移動(dòng)端開(kāi)發(fā)應(yīng)用的需求也是日漸增多。在開(kāi)發(fā)一個(gè)移動(dòng)端的時(shí)候,常常要進(jìn)行移動(dòng)端及PC端的整合,或者移動(dòng)端與服務(wù)器端的整合。
本文要討論的,就是移動(dòng)端與移動(dòng)端的整合問(wèn)題。
1.2 Android開(kāi)發(fā)技術(shù)概述
在Android開(kāi)發(fā)中有四大組件,他們分別是:用于表現(xiàn)功能的活動(dòng)(Activity);主要在后臺(tái)運(yùn)行的服務(wù)(Service)用于接收廣播的廣播接收器(BroadcastReceiver);相當(dāng)于數(shù)據(jù)庫(kù)的、支持在多個(gè)應(yīng)用中存儲(chǔ)和讀取數(shù)據(jù)的內(nèi)容提供商(Content Provider)。Android中所有程序的流程都運(yùn)行在Activity 之中,它是所有程序的根本,是Android當(dāng)中最基本的模塊之一。在Android的程序當(dāng)中,Activity一般代表手機(jī)屏幕的一屏。事實(shí)上,Activity與普通Web頁(yè)面類(lèi)似,在實(shí)際開(kāi)發(fā)的過(guò)程中也可在Activity當(dāng)中可以添加一些UI控件。一般一個(gè)Android應(yīng)用是由多個(gè)Activity組成的。Activity之間可以像Web頁(yè)面一樣互相切換。
2 Web service技術(shù)
2.1 Web Service簡(jiǎn)介
Web Service是一種服務(wù)導(dǎo)向架構(gòu)的技術(shù),通過(guò)標(biāo)準(zhǔn)的Web協(xié)議提供服務(wù),目的是保證不同平臺(tái)的應(yīng)用服務(wù)可以互操作。它基于SOAP等協(xié)議的遠(yuǎn)程調(diào)用標(biāo)準(zhǔn),通過(guò)Web Service可以將不同操作系統(tǒng)平臺(tái),不同語(yǔ)言,不同技術(shù)整合到一起。依據(jù)Web Service規(guī)范實(shí)施的應(yīng)用之間,無(wú)論它們所使用的語(yǔ)言、平臺(tái)或內(nèi)部協(xié)議是什么,都可以相互交換數(shù)據(jù)。Web Service是自描述、自包含的可用網(wǎng)絡(luò)模塊,可以執(zhí)行具體的業(yè)務(wù)功能。
Web Service架構(gòu)具有的特點(diǎn)有:首先是連網(wǎng)特性,Web Service的服務(wù)器端和客戶(hù)端應(yīng)用程序都能連網(wǎng);其次,在大多數(shù)情況下使用SOAP標(biāo)準(zhǔn)作為數(shù)據(jù)通信格式的標(biāo)準(zhǔn),且遵循的標(biāo)準(zhǔn)必須是開(kāi)放性的。第三,客戶(hù)端和服務(wù)器端的系統(tǒng)是松耦合的,即Web Service不關(guān)心客戶(hù)端和服務(wù)器端所使用的操作系統(tǒng)、對(duì)象模型或者編程語(yǔ)言。
2.2 Android通過(guò)Web Service訪問(wèn)異構(gòu)系統(tǒng)數(shù)據(jù)
Web Service是基于SOAP協(xié)議的。簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議是交換數(shù)據(jù)的一種協(xié)議規(guī)范,是一種輕量的、簡(jiǎn)單的、基于XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)子集)的協(xié)議,它被設(shè)計(jì)成在WEB上交換結(jié)構(gòu)化的和固化的信息。
Web Service使用SOAP用來(lái)傳遞信息的格式。SOAP可以和現(xiàn)存的許多因特網(wǎng)協(xié)議和格式結(jié)合使用,包括超文本傳輸協(xié)議(HTTP),簡(jiǎn)單郵件傳輸協(xié)議(SMTP),多用途網(wǎng)際郵件擴(kuò)充協(xié)議(MIME)。SOAP使用基于XML的數(shù)據(jù)結(jié)構(gòu)和超文本傳輸協(xié)議(HTTP)的組合定義了一個(gè)標(biāo)準(zhǔn)的方法來(lái)使用Internet上各種不同操作環(huán)境中的分布式對(duì)象。
在Android中訪問(wèn)Web Service的方法有兩種,一種是通過(guò)鏈接進(jìn)行訪問(wèn);另一種是通過(guò)第三方類(lèi)庫(kù)進(jìn)行訪問(wèn)。
通過(guò)第三方類(lèi)庫(kù)進(jìn)行訪問(wèn),需要下載一個(gè)第三方Jar包:ksoap2。這個(gè)包可以從Google上下載,即ksoap2-Android項(xiàng)目包。這個(gè)第三方包提供了Android 調(diào)用Web Service的一些接口。使用它,可以使得Android方便地與服務(wù)器端進(jìn)行數(shù)據(jù)交互?;玖鞒淌鞘紫纫玫椒?wù)器提供的地址、命名空間、方法名,參數(shù)的鍵和返回值的鍵;然后Android應(yīng)用程序通過(guò)這些鍵來(lái)傳遞值。
2.3 Android的兩種開(kāi)發(fā)方式
Android App又可分為Web App和Native App。其中,Web App是基于普通網(wǎng)站形式的App,而Native App是基于本地系統(tǒng)的應(yīng)用,相當(dāng)于電腦的桌面應(yīng)用程序。兩種App各有優(yōu)缺點(diǎn),相對(duì)而言,Native App更加高效,但開(kāi)發(fā)難度更加大。當(dāng)然,有些功能用Web App的形式是無(wú)法實(shí)現(xiàn)的,必須用Native App的形式進(jìn)行開(kāi)發(fā)。本文主要討論Web應(yīng)用系統(tǒng)與Android原生App的整合問(wèn)題。
3 Web服務(wù)器端與Android移動(dòng)端的整合
3.1 以Web service作為通用的接口
Android端與服務(wù)端可以通過(guò)不同的方式通信,其中一種比較通用的方式就是使用Web service。在Android與有些服務(wù)端語(yǔ)言開(kāi)發(fā)的應(yīng)用通信,則必須使用Web service。比如Android客戶(hù)端與.NET服務(wù)器端通信,則必須采用Web service,因?yàn)锳ndroid客戶(hù)端沒(méi)辦法直接訪問(wèn).NET頁(yè)面并操作后端數(shù)據(jù)庫(kù)。
因此,Web service主要目的就是為了實(shí)現(xiàn)Android客戶(hù)端和Web網(wǎng)站端進(jìn)行整合。因?yàn)锳ndroid Native App客戶(hù)端是用Java語(yǔ)言設(shè)計(jì)的,而Web網(wǎng)站端則是用其他語(yǔ)言進(jìn)行設(shè)計(jì)的。兩種不同語(yǔ)言開(kāi)發(fā)的系統(tǒng),需要用特定的方法對(duì)系統(tǒng)進(jìn)行整合。為了實(shí)現(xiàn)Android客戶(hù)端與網(wǎng)站服務(wù)器端及與SQL Server數(shù)據(jù)庫(kù)服務(wù)器端等進(jìn)行通信,需要構(gòu)建Web service比如.NET Web service。如果采用的數(shù)據(jù)庫(kù)是SQL Server數(shù)據(jù)庫(kù),通過(guò)Web Service,就可以將對(duì)SQL Server數(shù)據(jù)庫(kù)服務(wù)器相關(guān)操作的接口發(fā)布出去,供Android客戶(hù)端進(jìn)行調(diào)用。
3.2 Web service與服務(wù)器端整合的架構(gòu)設(shè)計(jì)
下面以Android Native App客戶(hù)端與基于.NET的服務(wù)器端平臺(tái)的通信為例,說(shuō)明Web service與服務(wù)器端的整合架構(gòu)。
Android Native App客戶(hù)端主要實(shí)現(xiàn)客戶(hù)端的功能,比如信息的查看、信息的咨詢(xún)等,主要是通過(guò)移動(dòng)端進(jìn)行操作。
由于Web端使用到的語(yǔ)言是ASP.NET語(yǔ)言,而Android Native App用的是Java語(yǔ)言,兩種技術(shù)所開(kāi)發(fā)出來(lái)的平臺(tái)是異構(gòu)的,故需要進(jìn)行系統(tǒng)整合。
要使基于Java SE技術(shù)的Android Native App與基于.NET技術(shù)的Web服務(wù)器端及SQL Server數(shù)據(jù)庫(kù)進(jìn)行通信和交換數(shù)據(jù),要通過(guò)Web Service進(jìn)行。
Android Native App客戶(hù)端功能模塊及其與Web端整合的框架圖1所示。
由圖1可見(jiàn),Web Service成為Android Native App客戶(hù)端及服務(wù)器端的粘合劑作用,它是這兩個(gè)子系統(tǒng)的橋梁。Android Native App客戶(hù)端通過(guò)Web Service與SQL Server數(shù)據(jù)進(jìn)行通信和交換數(shù)據(jù)。Android Native App客戶(hù)端對(duì)數(shù)據(jù)庫(kù)操作的結(jié)果既可以在移動(dòng)客戶(hù)端查看,也可以在Web端查看。
3.3 移動(dòng)客戶(hù)端與Web Service通信的實(shí)現(xiàn)流程
要實(shí)現(xiàn)Android對(duì)ASP.NET服務(wù)器端的訪問(wèn),需要編寫(xiě)Web Service接口,通過(guò)Web Service接口連接所需要的操作。
對(duì)于.NET應(yīng)用程序來(lái)說(shuō),可以借助Visual Studio軟件對(duì)系統(tǒng)進(jìn)行設(shè)計(jì)和實(shí)現(xiàn)。對(duì)于Android客戶(hù)端的實(shí)現(xiàn),可以借助Eclipse工具。Android Native App常用的開(kāi)發(fā)工具是Eclipse。在軟件架構(gòu)中,盡量采用分層結(jié)構(gòu)。其中,與ASP.NET Web Service進(jìn)行通信的方法可單獨(dú)計(jì)一個(gè)公共通信類(lèi),以實(shí)現(xiàn)移動(dòng)端與服務(wù)器端的交互。
移動(dòng)終端一般分為幾個(gè)基本頁(yè)面,比如登錄驗(yàn)證頁(yè)以及相關(guān)的功能頁(yè)面。Android Native App的頁(yè)面由兩部分組成,一部分是XML形式的界面設(shè)計(jì)文件,一部分是頁(yè)面對(duì)應(yīng)的Activity。對(duì)頁(yè)面的控制及業(yè)務(wù)代碼在Activity文件中實(shí)現(xiàn)。
以登陸頁(yè)為例,其中登錄頁(yè)的Activity包含用戶(hù)驗(yàn)證、修改用戶(hù)名、修改密碼等方法。Android的原生程序就是由這些頁(yè)面組成的,通過(guò)在頁(yè)面的操作,從服務(wù)器端請(qǐng)求信息,或者將信息發(fā)送給服務(wù)器端。當(dāng)然,服務(wù)器端與客戶(hù)端的交互還需要進(jìn)行數(shù)據(jù)格式的統(tǒng)一與轉(zhuǎn)換。
在Android端來(lái)說(shuō),可以讓幾個(gè)Activity共享一個(gè)Web Service公共通信類(lèi),在通信類(lèi)中封裝與Web Service通信的基本方法。
Web Service層發(fā)布在Web服務(wù)器端,Web Service層封裝了與移動(dòng)端相對(duì)應(yīng)的Web Service方法。
上面已提到,Web Service是一種基于SOAP協(xié)議的遠(yuǎn)程調(diào)用標(biāo)準(zhǔn),通過(guò)Web Service可以將不同操作系統(tǒng)平臺(tái)、不同語(yǔ)言、不同技術(shù)整合到一塊。對(duì)于Android原生應(yīng)用程序與Web Service通信來(lái)說(shuō),Android SDK中還需要使用第三方的SDK來(lái)調(diào)用Web Service。這個(gè)第三方SDK可以從Google下載相關(guān)的SDK項(xiàng)目包。
具體而言,Android調(diào)用Web Service步驟有幾步:
(1)指定Web service的命名空間和調(diào)用的方法名;
(2)如果調(diào)用方法有參數(shù),則需要設(shè)置調(diào)用方法的參數(shù)值;
(3)SOAP請(qǐng)求信息的生成。該信息由SoapSerializationEnvelope對(duì)象來(lái)進(jìn)行描述。
(4)創(chuàng)建HttpTransportsSE對(duì)象。通過(guò)HttpTransportsSE類(lèi)的構(gòu)造方法可以指定Web Service的WSDL文檔的URL;
(5)使用getResponse方法獲得Web Service方法的返回結(jié)果。
4 結(jié)論
以Web Service作為異構(gòu)系統(tǒng)的整合技術(shù)是一種較為常用的整合技術(shù),因?yàn)閃eb Service是語(yǔ)言中立的,它不受開(kāi)發(fā)語(yǔ)言和操作系統(tǒng)的影響,因此,利用它能進(jìn)行跨平臺(tái)開(kāi)發(fā)。在傳統(tǒng)的基于電腦的Web應(yīng)用與移動(dòng)App的整合應(yīng)用中,Web Service能發(fā)揮關(guān)鍵的作用,它可以開(kāi)發(fā)一種通用的異構(gòu)系統(tǒng)接口,使得移動(dòng)端與不同語(yǔ)言開(kāi)發(fā)的服務(wù)器端進(jìn)行整合。
參考文獻(xiàn)
[1]宋小倩,周東升.基于Android平臺(tái)的應(yīng)用開(kāi)發(fā)研究[J].軟件導(dǎo)刊,2011,10(2):104-106.
[2]王志勤.Web App還是Native App[J].商學(xué)院,2012,11(5):16-17.
[3]張趁香.基于Web Services的高校教學(xué)質(zhì)量監(jiān)控系統(tǒng)的分析與設(shè)計(jì)[J].電腦知識(shí)與技術(shù),2011,21(35):30-31.
[4]StephenWalther,Kevin Scott Hoffman,Nate Dudek.ASP.NET4 Unleashed[M].Amarican:Sams Publishing,2010.
[5]劉艾俠.基于Asp.net的web service調(diào)用[J].科技信息,2010,21(23):76-76.
作者簡(jiǎn)介
羅明挽(1979-),男,廣東省陽(yáng)江市人。陽(yáng)江職業(yè)技術(shù)學(xué)院講師,大學(xué)本科學(xué)歷。研究方向?yàn)閃eb應(yīng)用開(kāi)發(fā)。
作者單位
陽(yáng)江職業(yè)技術(shù)學(xué)院 廣東省陽(yáng)江市 529500