劉奕君,邢如意,駱鵬傲
(1.徐州醫(yī)學(xué)院醫(yī)學(xué)信息學(xué)院,江蘇 徐州221009;2.徐州市財(cái)經(jīng)高等職業(yè)技術(shù)學(xué)校信息技術(shù)系,江蘇 徐州221004)
物流信息在物流活動中具有十分重要的作用,物流信息平臺對物流信息進(jìn)行收集、傳遞、存儲、處理和輸出等,對物流活動起著指揮、協(xié)調(diào)、支持和保障的作用,為物流參與方提供決策依據(jù)。物流信息化平臺有助于提高物流參與方的工作效率,進(jìn)而促進(jìn)整個社會工作效率的提高,讓物流服務(wù)需求方可以享受到更快速、更便宜的物流服務(wù)。
當(dāng)前大多物流信息平臺采用C/S或B/S結(jié)構(gòu)進(jìn)行開發(fā),車主、發(fā)貨企業(yè)、物流公司等物流參與方需在計(jì)算機(jī)上打開軟件或使用瀏覽器瀏覽才能獲取物流相關(guān)信息。隨著物流業(yè)的快速發(fā)展、商品流通速度的加快,車主、發(fā)貨企業(yè)等需要更快捷、方便地獲取和發(fā)布物流信息的渠道,準(zhǔn)確及時(shí)地獲取數(shù)據(jù)能夠提高企業(yè)決策的速度、提升企業(yè)的競爭力。本文所提出的基于Android的物流信息平臺移動終端目標(biāo)即利用移動終端(智能手機(jī)、平板電腦)的便攜性,通過移動網(wǎng)絡(luò)使移動終端與物流信息平臺實(shí)現(xiàn)對接,讓物流參與方能夠隨時(shí)隨地獲取和發(fā)布物流信息,物流配送更加迅速、高效和易于控制。
Android[1]是一種基于Linux內(nèi)核的開源的嵌入式操作系統(tǒng),是近幾年在嵌入式領(lǐng)域和移動領(lǐng)域應(yīng)用最廣泛的系統(tǒng)之一。Android平臺的開源、開放的特性使其在短時(shí)間內(nèi)大量應(yīng)用在手機(jī)、平板電腦等移動和嵌入式設(shè)備上,各大移動設(shè)備廠商紛紛推出了基于Android操作系統(tǒng)的智能手機(jī)等設(shè)備。Android系統(tǒng)基于Linux2.6版本內(nèi)核進(jìn)行改進(jìn),具有極高的穩(wěn)定性和安全性。
物聯(lián)網(wǎng)、互聯(lián)網(wǎng)技術(shù)的快速發(fā)展和智能移動終端的普及,使得Android平臺在其他行業(yè)也大放光彩,基于Android的智能家居平臺、醫(yī)療監(jiān)控平臺、移動教育平臺等。對于開發(fā)者而言,開發(fā)者可以選擇使用Java和C++語言進(jìn)行開發(fā)移動應(yīng)用,Android平臺為Java和C++語言提供了大量的函數(shù)庫供開發(fā)人員調(diào)用。從開發(fā)效率和易用性來比較,大多數(shù)開發(fā)者選用Java語言,Eclipse平臺進(jìn)行開發(fā)。
XMPP[2]的全稱是可擴(kuò)展通訊和表示協(xié)議,是一個開放的基于XML的數(shù)據(jù)模型和協(xié)議,是即時(shí)通信的Internet標(biāo)準(zhǔn)。XMPP的核心思想是在網(wǎng)絡(luò)中對XML流的分片段發(fā)送。由于XML具有跨平臺、易于解析等特性,因此XMPP協(xié)議具有極強(qiáng)的可擴(kuò)展性,經(jīng)過擴(kuò)展后的消息可以用于處理系統(tǒng)業(yè)務(wù)相關(guān)的請求,使得用戶與用戶之間、用戶與服務(wù)端之間可以互相通信,可廣泛應(yīng)用在互聯(lián)網(wǎng)應(yīng)用上。XMPP基于C/S結(jié)構(gòu),客戶端之間消息通過服務(wù)端進(jìn)行轉(zhuǎn)發(fā),消息傳遞時(shí)采用TLS機(jī)制進(jìn)行加密和采用SASL協(xié)議對XML流進(jìn)行認(rèn)證,保證了傳輸過程中的安全性。
在物流信息平臺移動終端上,為實(shí)現(xiàn)信息平臺向終端實(shí)時(shí)推送信息,服務(wù)端與移動終端之間采用XMPP協(xié)議進(jìn)行數(shù)據(jù)傳輸,一方面提高了數(shù)據(jù)傳輸?shù)姆€(wěn)定性和高效性,另一方面服務(wù)端能夠并發(fā)支持更多的移動終端進(jìn)行連接。
物流信息平臺移動終端是方便車主、發(fā)貨企業(yè)、物流公司、快遞公司、搬家公司等物流參與各方及時(shí)獲取、發(fā)布和查找關(guān)于車源、貨源、配貨站、物流公司等信息的移動應(yīng)用軟件。移動終端相當(dāng)于運(yùn)行于互聯(lián)網(wǎng)上的物流信息平臺的移動版本,其具有移動、便攜、隨時(shí)隨地查看等特點(diǎn)。
移動終端從功能結(jié)構(gòu)上可以劃分為6個模塊,分別是實(shí)時(shí)信息接收模塊、車源信息管理模塊、貨源信息管理模塊、物流和快遞公司信息管理模塊、用戶信息管理模塊、系統(tǒng)設(shè)置和幫助模塊。在服務(wù)端包括用于與移動端進(jìn)行信息交換的接口,此接口可分為3個模塊,分別為實(shí)時(shí)信息推送模塊、業(yè)務(wù)信息查詢及維護(hù)模塊、用戶信息維護(hù)模塊。功能結(jié)構(gòu)如圖1所示。
服務(wù)端實(shí)時(shí)信息推送模塊用于向移動端推送線上最新的物流供需信息、天氣預(yù)警、高速公路路況等信息;業(yè)務(wù)信息查詢及維護(hù)模塊用于處理移動端發(fā)送的車輛信息、貨源信息和物流及快遞信息的查詢和信息發(fā)布請求;用戶信息模塊用于處理移動端發(fā)送的用戶信息注冊、登錄認(rèn)證、信息維護(hù)等請求。由于服務(wù)端與移動端采用具有跨平臺的XMPP協(xié)議和JSON數(shù)據(jù)格式進(jìn)行數(shù)據(jù)傳輸,因此無論物流信息平臺服務(wù)端采用何種語言進(jìn)行開發(fā),都可以方便地開發(fā)接口與移動端進(jìn)行集成。
移動終端中實(shí)時(shí)信息接收模塊與服務(wù)端信息推送模塊對應(yīng),當(dāng)移動端打開時(shí)自動連接服務(wù)端,服務(wù)端通過此連接向移動端進(jìn)行信息推送;車輛信息管理、貨源信息管理、物流和快遞信息管理模塊與服務(wù)端業(yè)務(wù)信息查詢接口連接,統(tǒng)一采用JSON格式進(jìn)行數(shù)據(jù)傳輸;用戶信息管理與服務(wù)端用戶信息維護(hù)接口連接。系統(tǒng)設(shè)置與幫助模塊用于方便用戶設(shè)置個人資料、推送信息接收喜好設(shè)置和提供幫助文檔等。
移動端與服務(wù)端之間的用戶和業(yè)務(wù)消息傳遞采用JSON格式組織,JSON具有可讀性高、跨平臺、解析效率高等優(yōu)勢。由于移動終端與服務(wù)端消息種類較多,為便于統(tǒng)一分類管理,每一條消息設(shè)置了類型編號和描述。在本例中消息編號以10開頭表示用戶類消息,20開頭表示業(yè)務(wù)類消息。并且在消息數(shù)據(jù)中添加了令牌Token用于標(biāo)識消息的安全性。此令牌的計(jì)算方法為:在第一次與服務(wù)端交互時(shí),服務(wù)端向移動端下發(fā)的會話編號,加上消息數(shù)據(jù)的數(shù)據(jù)指紋和消息類型編號混合加密而成。服務(wù)端收到消息數(shù)據(jù)后首先對令牌進(jìn)行驗(yàn)證判斷數(shù)據(jù)的正確性和完整性。通過此種機(jī)制保證了消息在傳遞時(shí)安全性,避免消息傳輸時(shí)截獲篡改等操作。以下展示了用戶認(rèn)證消息和業(yè)務(wù)消息JSON格式示例。
用戶登錄認(rèn)證消息格式
移動終端的代碼架構(gòu)設(shè)計(jì)如圖2所示。
圖2 移動終端代碼架構(gòu)設(shè)計(jì)
在圖2中XMPPService基于Android Service開發(fā),其作為一個后臺應(yīng)用保持與服務(wù)端的長連接,用于接收推送信息。UserInfo Manager、CarInfo Manager和Goods Manager類則用于處理用戶信息、車輛信息和貨源、物流信息的查看和發(fā)布。
移動終端XMPP實(shí)現(xiàn)選擇asmack類庫,其是smack在Android上的構(gòu)建版本,smack則是完整實(shí)現(xiàn)了XMPP協(xié)議的開源API庫。在asmack類庫中提供了XMPPManager類來管理連接信息,包括XMPP協(xié)議的端口、服務(wù)端IP、登錄名和密碼和連接的維護(hù),XMPPConnection類創(chuàng)建至服務(wù)端的連接等多個類簡化開發(fā)者底層的XMPP協(xié)議處理,從而提高開發(fā)效率。
物流信息平臺服務(wù)端推送模塊接口采用AndroidPN搭建,AndroidPN是一個基于XMPP協(xié)議的Java開源推送通知實(shí)現(xiàn),其包含了完整的Android客戶端示例和Web管理端。使用AndroidPN搭建推送服務(wù)端,不需修改原有物流信息平臺代碼,可將AndroidPN提供的Web服務(wù)管理端安裝、啟動后,將其頁面嵌入即可,同時(shí)AndroidPN也可方便地通過引用的形式嵌入至原有系統(tǒng)中。Android-PN服務(wù)端默認(rèn)占用5222端口處理客戶端的XMPP請求,其功能包括用戶信息的認(rèn)證和消息的推送。服務(wù)端與客戶端的通信基于會話Session,客戶端通過指定端口連接服務(wù)端后,將連接信息發(fā)送到服務(wù)端,然后等待服務(wù)端推送信息,消息以stream節(jié)點(diǎn)作為開始和結(jié)束。在連接上,使用asmack能夠完成與服務(wù)端的連接、消息的解析、斷開重連等功能。
首先搭建基于Eclipse+ADT的移動終端開發(fā)環(huán)境,分別下載 Android2.2、4.0和4.2版本模擬器用于適配測試,在手機(jī)屏幕適配上主要考慮適配四寸屏及以上手機(jī),分辨率為480×800及以上,其次是創(chuàng)建Android項(xiàng)目,編譯級別選擇4.0,向項(xiàng)目中添加asmack-jse.jar和gson.jar文件分別用于實(shí)現(xiàn)XMPP協(xié)議通信和JSON文本的解析。向項(xiàng)目“中\res\raw”文件夾中添加“androidpn.propeties”文件,用于配置XMPP服務(wù)端連接參數(shù),并添加AndroidPN客戶端源碼至項(xiàng)目源文件夾中。與XMPP服務(wù)端連接的主要代碼如下:
在業(yè)務(wù)信息處理上,因?yàn)椴捎昧薐SON統(tǒng)一了格式,因此代碼中創(chuàng)建了JsonMessage類用于封裝這類信息,JsonMessageDelegate類用于業(yè)務(wù)消息的分發(fā)處理和與服務(wù)端的交互,其作用如圖3所示。
圖3 業(yè)務(wù)消息處理流程
服務(wù)端通過HTTP或TCP協(xié)議向客戶端發(fā)送業(yè)務(wù)消息JSON文本,移動終端收到后交由Json-MessageDelegate進(jìn)行解析為JsonMessage對象,然后抽取中消息中MessageId屬性的值,判斷該值的含義,然后將此對象傳遞給對應(yīng)的處理器Manager對象進(jìn)行處理。Manager對象在收到后,首先獲取MessageData屬性的值進(jìn)行數(shù)據(jù)一致性的校驗(yàn),然后再進(jìn)行處理(顯示、丟棄)。對應(yīng)代碼如下所示:
在界面設(shè)計(jì)上使用最多的控件為ListView,其以列表的方式顯示信息,并可以靈活配置布局。List-View的數(shù)據(jù)需由Adapter提供。以車輛違章信息查詢?yōu)槔?,為?shí)現(xiàn)列表可拖動效果,自定義了 My-ScrollView類和MyListView類。自定義Query-ResultItemAdapter類提供數(shù)據(jù)。代碼結(jié)構(gòu)如圖4所示。
圖4 違章查詢代碼結(jié)構(gòu)
重寫ScrollView和ListView類主要解決了用戶在屏幕滑動查看數(shù)據(jù)時(shí)的沖突問題,同時(shí)實(shí)現(xiàn)了下拉刷新等效果。
基于Android的物流信息平臺移動終端,向物流參與方提供了可隨時(shí)隨地查看和發(fā)布物流信息的移動辦公平臺,通過使用消息推送機(jī)制可實(shí)時(shí)獲取最新的物流信息,且參與方可通過移動終端管理自身相關(guān)業(yè)務(wù)信息。移動終端采用AndroidPN作為服務(wù)端,asmack作為Android端開發(fā)庫,方便應(yīng)用的擴(kuò)展,移動終端作為物流信息平臺的補(bǔ)充,在移動互聯(lián)網(wǎng)快速發(fā)展的今天,其重要性愈加凸顯。
[1]姚昱曼,劉衛(wèi)國.Android的架構(gòu)與應(yīng)用開發(fā)研究[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2008(11):110-113.
[2]周文瓊,王樂球,周桐.基于XMPP的企業(yè)即時(shí)通信系統(tǒng)研究與應(yīng)用[J].吉林大學(xué)學(xué)報(bào):信息科學(xué)版,2010(1):106-111.