彭藝蕾 王莉莉 孫紅濤 祁正龍 高放
摘要:為了給用戶生活中實時交流、出行、集會等方面提供便利,本文針對移動互聯(lián)網(wǎng)通信中多用戶如何位置共享及實時通信的問題,詳細闡述了一個性能較好、可行度較高的設計方案并給出了相關系統(tǒng)的具體開發(fā)和實現(xiàn)方法。本系統(tǒng)基于Android系統(tǒng),采用了高德地圖、網(wǎng)易云信的SDK和API及RSA加密技術,實現(xiàn)了多用戶定位、導航、實時通信等功能并保證了交互過程的安全性,為其他有關地圖或通信的Android系統(tǒng)設計提供了參考。
關鍵詞:Andmid;定位;導航;實時通信;加密
0引用
隨著社會的飛速發(fā)展,人們的生活水平在不斷提高的過程中,對信息和位置的實時I生與準確度有了更高的要求,手機即已成為滿足這一需求設計的重要載體。Android在Linux操作系統(tǒng)的基礎上研發(fā)推出了一種可供高端拓展、且功能全面的嵌入式系統(tǒng)框架,憑借其通用、開源、免費的特點廣泛地應用于移動設備,是目前位居先鋒時尚的主流手機平臺之一,各種Android APP也隨即應運而生。本系統(tǒng)是一款基于Android的多用戶地理位置共享、信息實時系統(tǒng),能為用戶在實時交流、出行、集會等多方面定制生成更多現(xiàn)實高效便利。同時,明確信息發(fā)送者的地理位置,能幫助用戶辨析信息的真實性;通過分析地理位置,也能增強信息的關聯(lián)性。
1系統(tǒng)架構
1.1系統(tǒng)框架
本系統(tǒng)按照C/S(Client/Server)的架構模式,一端是基于Android系統(tǒng)開發(fā)的APP作為客戶端,另一端選用網(wǎng)易云信、高德地圖的服務器。服務器端采用并發(fā)型服務類型,即利用生成其他服務器的方法來處理客戶端的請求,其目的在于為多客戶端同時完善配備實時通信和在線地圖的服務??蛻舳嗽贏ndroid Studio集成環(huán)境中使用Java、XML語言設計開發(fā)并支持調(diào)試,檢驗無誤則簽名打包生成后綴為.apk的文件,供Android移動設備使用。本次研發(fā)的系統(tǒng)結(jié)構可如圖1所示。
1.2系統(tǒng)功能模塊
本系統(tǒng)主要由客戶端、通信服務器、地圖服務器三大模塊組成。其中,客戶端的實際功能是為客戶與客戶之間、客戶與服務器之間的交互來構建提取界面并對交互結(jié)果進行顯示。服務器端則是用于接收用戶請求,啟動一個新的服務器對接收到的請求進行分析處理并將結(jié)果返回給客戶端。具體來說,通信服務器的主要功能是接收發(fā)送端發(fā)送的消息對象并交付給其對應的目的客戶端(一個消息對象的發(fā)送端和接收端可能為同一客戶端,如用戶向服務器發(fā)起登錄或注銷請求);地圖服務器主要提供在線地圖并接收和響應客戶端發(fā)起的定位或?qū)Ш秸埱?。系統(tǒng)中整體設計功能模塊如圖2所示。在此,也將針對每一模塊給出如下功能闡析。
1.2.1通信模塊
在通信模塊中,設計時需要調(diào)用通過手機接入互聯(lián)網(wǎng)即時發(fā)送和接收消息對象等業(yè)務,而在此過程中,消息的可靠性和即時性則呈現(xiàn)出特別的重要性。本系統(tǒng)采用了網(wǎng)易云信服務器動態(tài)智能DNS掉線快速重連機制消息重排、持續(xù)重連直至到達的傳送機制為可靠性和即時性提供保障。也就是,設計時通過調(diào)用網(wǎng)易云信的SDK和API,實現(xiàn)了用戶登錄注銷、信息發(fā)送與接收、群組聊天等功能,深入的探討論述可詳見本文第2節(jié)。
1.2.2地圖模塊
對于地圖的整體功能,Android系統(tǒng)中內(nèi)置的Google在線地圖的視圖組件(MapView)為Android移動終端設計與實現(xiàn)地圖服務提供了便捷靈活的開發(fā)平臺。但由于考慮到文化的差異和政策的限制,研發(fā)中選擇了國內(nèi)的地圖服務。本次系統(tǒng)利用LBS開放地理信息服務平臺、基于高德地圖的地理信息系統(tǒng)設計方法來提升地圖方面的需求開發(fā)等級,包括定位、搜索、導航、路徑規(guī)劃等,其具體實現(xiàn)則可參見本文第3節(jié)。
1.3系統(tǒng)SDK的集成及權限申明
SDK能為移動應用設計生成完善的系統(tǒng)開發(fā)框架,屏蔽掉復雜細節(jié),對外提供較為簡潔的API接口。在系統(tǒng)開發(fā)過程中引用了網(wǎng)易云信和高德地圖的SDK,在對2種SDK處理集成時,多處出現(xiàn)了jar包的沖突問題。研究中主要采用了如下2種方式解決jar包的沖突問題:
1)對實現(xiàn)各功能SDK分開下載、并組合后再集成的方式直接避免沖突的產(chǎn)生;
2)對于無法直接避免沖突的包,拆分比較其結(jié)構后,去掉產(chǎn)生沖突的冗余部分,再合并打包。
Android系統(tǒng)基于Linux內(nèi)核運行,并以重點保障其系統(tǒng)安全性作為立足點,Google公司即專門設置了一套嚴格的安全權限機制。為避免應用程序的錯誤運行和程序崩潰等問題,調(diào)試前就要在AndroidManifest.xml文件中對目標需求權限進行申明并對與uI界面直接關聯(lián)的Java文件正式予以注冊。本系統(tǒng)還要對集成后的SDK將用到的網(wǎng)絡連接、系統(tǒng)?;睢⑼庵么鎯Φ葯嘞迊碓O計給出確切聲明。
2實時信息功能具體實現(xiàn)
2.1登錄注銷
本系統(tǒng)將用戶賬號(ID)作為用戶唯一標識,提供了手動登錄和自動登錄兩種登錄模式。用戶在首次登錄或切換登錄賬號時,需要手動登錄。系統(tǒng)在獲取得到用戶輸入的賬號密碼后將其作為調(diào)用網(wǎng)易云信SDK中AuthService提供的login接口的參數(shù)向服務器發(fā)起主動登錄請求,服務器端校驗后返回登錄狀態(tài)碼,客戶端根據(jù)狀態(tài)碼進行相應的操作,若登錄成功則直接跳轉(zhuǎn)到消息界面。對于已具登錄歷史且授權允許自動登錄的用戶,在初始化SDK時系統(tǒng)會自動將保存在本地的登錄信息傳人Loginlnfo,實現(xiàn)后臺的自動登錄。系統(tǒng)通過監(jiān)聽用戶登錄狀態(tài)的回調(diào)函數(shù)來判斷用戶是否登錄成功。
2.2信息發(fā)送與接收
在網(wǎng)易云信SDK中,消息對象均為IMMessage。IMMessage包括聊天對象ID、聊天類型、消息類型、消息內(nèi)容、消息附件對象等基本的可編輯項,該消息對象支持文本、圖片、地理位置等類型的消息傳送。系統(tǒng)接收到消息后將接收方的ID作為IMMessage對象的標識,通過MessageBuilder提供的接口創(chuàng)建消息對象,然后調(diào)用MsgService的sendMessage接口將消息發(fā)送出去。
JSON是一種輕量級的數(shù)據(jù)交換格式。這是基于ECMAScript規(guī)范的—個子集,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。JSON主要有以下優(yōu)點:數(shù)據(jù)格式比較簡單、易于讀寫、格式都是壓縮的、能夠明顯節(jié)約帶寬。發(fā)送消息時,本系統(tǒng)將所有的文本消息用content字符串來整合保存并高效發(fā)送;將圖片消息序列化為JSON格式字符串后則順次展開傳輸。
為了設計得到消息的自動接收功能,必須添加消息接收觀察者。系統(tǒng)的消息回調(diào)函數(shù)會在消息接收觀察者監(jiān)聽到新消息到達時,根據(jù)收到消息的類型產(chǎn)生不同的操作。對于文本或圖片類型的消息,系統(tǒng)會直接向用戶發(fā)出新消息通知并將消息加入到相應聊天對象的消息列表中顯示。消息接收觀察者具有生命周期。對于一次消息會話,本系統(tǒng)在onCreate()里對消息接收觀察者進行注冊,并在onDestroy()中將其注銷。
2.3群聊
本系統(tǒng)通過向用戶提供群組功能來實現(xiàn)多人聊天。在群組聊天中,每個群組擁有唯一的ID并記錄其含有的成員。與一對一聊天相比不同的是,當用戶在向群組發(fā)送消息時,系統(tǒng)直接將消息對象的標識設置為群組ID后發(fā)送,而不會給群組中的每個成員都發(fā)送一次消息。同時,對于一個群的群組成員來說,以群組ID為標識的消息對象會無可選擇地由其消息接收觀察者來自動響應接收。為了使用戶不致因群組消息而受到打擾,本系統(tǒng)還為用戶設定配備了群組消息提醒的開關功能。
3地圖功能設計實現(xiàn)
3.1地圖展現(xiàn)
地圖展現(xiàn)是地圖服務的基本設計功能??蛻舳嗽诮尤牖ヂ?lián)網(wǎng)的條件下,能獲取到全球地圖,并能通過自由縮放比例尺來查看地理信息的詳略。本系統(tǒng)通過高德地圖的SDK初始化地圖變量AMap后,用Android系統(tǒng)中的MapView組件來展示地圖。高德地圖提供了標準地圖、夜景地圖、衛(wèi)星地圖三種地圖展現(xiàn)模式。根據(jù)用戶的選擇,系統(tǒng)通過對地圖控件的引用獲取AMap的變量實例,并對地圖類型給出有效設置。
3.2定位
高德地圖的定位服務包含GPS和網(wǎng)絡定位(Wi-Fi和基站定位)兩種能力,有高精度定位、低功耗定位、僅用設備定位三種模式??紤]到本系統(tǒng)對位置的準確性有較高要求,因此選用了GPS和網(wǎng)絡定位相結(jié)合的高精度定位模式進行定位。同時,為了最大限度保證位置的實時陛,系統(tǒng)采用了自動連續(xù)定位模式并設置默認更新速度為1 000ms/次。設計的操作過程具體如下:首先,在系統(tǒng)主線程中聲明一個AMapLocationClient類對象并傳人類型為context的對象作為參數(shù);然后,創(chuàng)建一個AMapLocationClientOption對象,用來設置應用定位模式和關聯(lián)參數(shù);最后,創(chuàng)建一個AMapLocationListener接口類對象,作為定位結(jié)果返回時的監(jiān)聽器。
3.3導航
POI(Point of Interest)可稱為“導航地圖信息”,其中包含一個實際位置點的名稱、類別、經(jīng)緯度、周邊這4個方面的指示信息。中國開放的POI數(shù)據(jù)庫,是整個導航產(chǎn)業(yè)的基石。用戶可根據(jù)目的地名稱、類別等信息進行搜索,比如對于一個名稱為“XXX”、類型為餐館的POI,在用戶搜索的關鍵字為“XXX”或餐館時,都能搜索得到。用戶通過搜索能獲得對景點、大廈、地鐵站甚至衛(wèi)生間等建筑的準確查找。本系統(tǒng)的自定義標記能將所有搜索到的POI在地圖上分別形成標注,并在用戶根據(jù)實際情況選擇一個標記后,系統(tǒng)通過實現(xiàn)高德地圖導航SDK中的AMapNavi導航對外控制類來生成展示起點到目的點的路徑規(guī)劃,再通過調(diào)用該類的startNavi(int naviType)方法開啟實時導航。
3.4多用戶位置共享
在高德地圖定位SDK為用戶提供定位功能的基礎上,本系統(tǒng)實現(xiàn)了多用戶位置共享的功能。同時,本系統(tǒng)的群組功能也為群成員的多用戶位置共享設定了執(zhí)行基礎。群組功能下,群用戶在自身定位成功并發(fā)起位置共享后,系統(tǒng)會將用戶自身的POI格式化并通過網(wǎng)易云信SDK的創(chuàng)建地理位置消息類IMMessage消息對象后,將消息對象發(fā)送到群組中(消息對象的發(fā)送過程詳細操作見2.2節(jié)):群組其他用戶的消息接收觀察者接收此類信息,經(jīng)過標準化處理后傳遞給高德地圖并調(diào)用其定位SDK來求得結(jié)果定位,得到結(jié)果后在地圖中添加POI進行標注。地理位置的發(fā)送過程和接收過程分別如圖3、圖4所示。
4其他功能實現(xiàn)
4.1自定義列表適配器
Java的適配器模式能把一個類的接口變換成客戶端需要的另一種接口,從而使曾因接口不匹配而無法一起工作的類能夠轉(zhuǎn)為一體協(xié)同合作。適配類根據(jù)參數(shù)返還一個合適的實例給客戶端。為增強UI界面的流暢性、美觀性,本系統(tǒng)另外自定義了繼承BaseAdapter的列表視圖適配器ListViewAdapter。該類的技術功能可設定為顯示用戶的歷史會話列表及用戶間消息的往來。
4.2數(shù)據(jù)加密傳輸
研究知道,網(wǎng)易云信服務器在進行數(shù)據(jù)傳輸和存儲時配備了私有的加密協(xié)議。為了進一步確保系統(tǒng)在通信過程中的安全性,本系統(tǒng)采用了RSA加密技術對通信中交互的數(shù)據(jù)進行加密處理。具體過程如下:發(fā)送方用自己的私鑰將簽名內(nèi)容加密,附加在信息后,再用接收方的公鑰將整個信息直接加密,而后將加密信息送給服務端;接收方收到加密信息后,先用自己的私鑰將加密信息實現(xiàn)解密,得到發(fā)送方的原文和數(shù)字簽名,再用發(fā)送方的公鑰來解密簽名。這個過程既保證了數(shù)據(jù)傳輸?shù)陌踩?,也避免了發(fā)送方可能出現(xiàn)的“假冒”風險。
5系統(tǒng)界面展示
多用戶位置共享及實時通信系統(tǒng)的主運行界面如圖5所示。界面中有5人正在進行位置共享,每個人在確認自己位置時也能看到其他用戶所處的位置。在一位用戶將目的點設置為圖書館后,系統(tǒng)將目的地在圖中隨即清晰標出,并為所有用戶都規(guī)劃出了一條到圖書館的路徑顯示在地圖上。界面的下半部分為用戶提供了聊天界面,用戶可以憑此與其他用戶實時交流互動。同時,最近的一條聊天信息也會在用戶的頭像上得到理想定位顯示。
6結(jié)束語
本系統(tǒng)采用了模塊化結(jié)構設計方法并結(jié)合了Android的平臺特性,是基于Android的多用戶位置共享、實時通信系統(tǒng)。本文對該系統(tǒng)的功能實現(xiàn)和重點設計給出了詳盡的研發(fā)論述。仿真表明,客戶端界面友好,交互性強,符合終端用戶的要求。在對系統(tǒng)進行多端測試后,系統(tǒng)的穩(wěn)定性和響應速度也符合預期設定,是一款滿足用戶特定需求的應用軟件。