王狄
摘要:該系統(tǒng)旨在實現(xiàn)兩部分功能。即通過解密陌生人客戶端讓用戶實現(xiàn)搖一搖在地圖上顯示好友進(jìn)行互動添加。和提供豐富的交流手段如語音,圖片等使用戶更為便捷的通訊。同時采取多進(jìn)程的方式,主進(jìn)程為前臺進(jìn)程,輔進(jìn)程為后臺推送進(jìn)程以達(dá)到在客戶將程序退出時仍然能夠從服務(wù)器端獲取信息。通過定義單獨的服務(wù)類來處理和openfire服務(wù)器的連接問題從而實現(xiàn)解耦。通過定義單獨的manager類來提供與即時通訊相關(guān)的方法實現(xiàn)解耦。通過維護(hù)全局的application類來提供某些常用方法以實現(xiàn)解耦。
關(guān)鍵詞:設(shè)計;系統(tǒng)
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)10-0092-02
1 緒論
1.1 開發(fā)背景及意義
隨著人們的生活的豐富化,社交軟件成為生活中必不可少的一部分,但是近些年新興起的基于陌生人之間通訊的社交軟件卻越來越火爆,陌陌就是其典型的代表。隨著陌陌的上市,SoLoMoGlo(Social + Local + Mobile + Global)的概念也在持續(xù)升溫,成為大學(xué)生創(chuàng)業(yè)的選擇之一。本項目通過游戲的形式完成陌生人之間的交友,進(jìn)而實現(xiàn)基于陌生人的社交通訊。
1.2 開發(fā)目標(biāo)
SoLoMoGlo(Social + Local + Mobile + Global)概念這些年中持續(xù)發(fā)酵,基于移動社交的商業(yè)模式層出不窮,相關(guān)產(chǎn)品眾多。
2 陌生人-移動社交網(wǎng)絡(luò)App設(shè)計概述
2.1 設(shè)計目標(biāo)
1) 新用戶可以直接點擊注冊按鈕來進(jìn)行注冊,注冊完成后自動登陸。
2)登陸后可以點擊側(cè)滑菜單中的搖一搖進(jìn)行好友的添加。
3)添加好友成功后可以直接進(jìn)行文字語音的聊天并可分享圖片。
4)點擊側(cè)滑菜單中的我的信息查看當(dāng)前登陸賬號的信息。
5)聯(lián)系人界面或者聊天界面點擊好友頭像可查看好友的具體信息。
2.2 模塊劃分
3.3 詳細(xì)設(shè)計
3.1 系統(tǒng)總體層次設(shè)計
本系統(tǒng)采取了C/S軟件架構(gòu),即大家所熟知的客戶端/服務(wù)器體系結(jié)構(gòu),通過將任務(wù)分配到Client端與Server端從而降低了系統(tǒng)通訊的開銷。
服務(wù)器端采用了開源的Openfire服務(wù)器,Openfire采用Java開發(fā),基于XMPP的實時協(xié)作的IM跨平臺服務(wù)器。Openfire還提供了完善的后臺管理功能,可以更加方便的管理系統(tǒng)用戶。
而在客戶端中,用戶間的通訊是通過服務(wù)器的轉(zhuǎn)發(fā)來實現(xiàn)的,將信息打包成XML文件發(fā)送給服務(wù)器,然后服務(wù)器轉(zhuǎn)發(fā)給相應(yīng)的用戶。在ASmack庫的支持下,XMPP客戶端的登陸,消息收發(fā)等基本功能需要重寫相應(yīng)的函數(shù),并且調(diào)用相應(yīng)的接口來實現(xiàn)。
客戶端采用MVC的軟件架構(gòu),采用Android的XML文件對界面進(jìn)行描述,作為視圖層V(View),負(fù)責(zé)前臺界面的顯示;Activity活動類承載了控制層C(Controller)的任務(wù),通過Activity進(jìn)行邏輯業(yè)務(wù)的處理;對于處理數(shù)據(jù)庫與處理服務(wù)器相關(guān)操作屬于M(Model),該層具體上依賴于自定義的服務(wù)類。
3.1.1 服務(wù)器端的層次結(jié)構(gòu)設(shè)計
XMPP服務(wù)器采用的是開源的Openfire服務(wù)器,這個開源的項目應(yīng)用看apache的mina框架作為NIO框架。簡單來說Openfire服務(wù)器在mina框架的基礎(chǔ)上建立了一個簡單的服務(wù)器,用來發(fā)送基本的IO數(shù)據(jù)流,然后把接受到的IO解析為XML文件,后通過XMPP協(xié)議對接收到的XML文件進(jìn)行操作。
3.1.2 客戶端的層次結(jié)構(gòu)設(shè)計
3.2 系統(tǒng)數(shù)據(jù)庫設(shè)計
系統(tǒng)采用的是C/S架構(gòu),所以客戶端本地也要進(jìn)行數(shù)據(jù)的持久化,所以系統(tǒng)的數(shù)據(jù)庫設(shè)計分為客戶端和服務(wù)器端。
3.2.1 服務(wù)器端數(shù)據(jù)庫的設(shè)計
由于服務(wù)器端采用的是開源的Openfire,它的數(shù)據(jù)庫端已經(jīng)有了良好的定義,并且支持外部數(shù)據(jù)庫。在本程序中我們沒有使用Openfire內(nèi)置的數(shù)據(jù)庫,而是采用了Mysql,主要是為了開發(fā)時查詢數(shù)據(jù)的方便以滿足實際需要。Openfire數(shù)據(jù)庫主要用來存儲用戶注冊的信息,用戶的名片信息以及聯(lián)系人信息。
3.2.2 客戶端數(shù)據(jù)庫的設(shè)計
因為相關(guān)功能的需求,客戶端也要對一些數(shù)據(jù)進(jìn)行本地的存儲。借助安卓內(nèi)置的Sqlite數(shù)據(jù)庫,我們可以高效地完成它。
客戶端數(shù)據(jù)庫主要用來存儲聯(lián)系人信息和聊天信息。系統(tǒng)通過安卓sqlite包里面提供的api可以很便捷的操縱數(shù)據(jù)庫。
3.3 系統(tǒng)關(guān)鍵點簡介
1)對遠(yuǎn)程服務(wù)的實現(xiàn)(aidl)
在清單文件中對IMService服務(wù)配置為多進(jìn)程
通過onBind返回遠(yuǎn)程的binder對象,每次在程序中通過綁定服務(wù)來獲取binder對象,從而獲取XmppManager的遠(yuǎn)程接口對象(實例)來進(jìn)行對服務(wù)器的操作。
通過在XmppManager類中定義所有的方法來實現(xiàn)對服務(wù)端的解耦。
2)對各類數(shù)據(jù)(聊天記錄,聯(lián)系人列表的獲取監(jiān)聽本地數(shù)據(jù)庫)
通ContentResolver對數(shù)據(jù)庫進(jìn)行操作更好的減輕了由單純監(jiān)聽帶來的各種問題。
3)登陸模塊的實現(xiàn)
登陸模塊分為前臺登陸和后臺登陸兩部分
前臺登陸中保存當(dāng)前登陸用戶的信息,然后開啟相應(yīng)的服務(wù)進(jìn)行后臺登陸。所有過程放在異步任務(wù)中執(zhí)行。后臺登陸與前臺登陸大致相同。
4)百度地圖相關(guān)
在全局的application類中對百度地圖的監(jiān)聽進(jìn)行實現(xiàn),具體代碼如下:
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
}
}
* 設(shè)置得到位置后的回調(diào)監(jiān)聽器
* @param listener
*/
public void setGetLocationListener(getLocationListener listener){
this.listener = listener;
}
* 得到自己位置信息的監(jiān)聽器
* @author fsc
public interface getLocationListener{
* 得到百度地圖api返回的位置信息后的回調(diào)
* @param location 當(dāng)前自己拼裝的位置信息
* @param errorCode 百度地圖返回的錯誤碼,根據(jù)錯誤碼判斷定位是否成
public void getLocation(String location,int errorCode);
}
參考文獻(xiàn):
[1] android文檔[EB/OL]. http://www.androidcommunitydocs.com/.
[2] 部署以及運開源項目[EB/OL].http://blog.csdn.net/shimiso/article/details/8816558.
[3] openfire[EB/OL].http://www.igniterealtime.org/.
[4] android-flat-button[EB/OL]. https://github.com/hoang8f/android-flat-button.
[5] Shimer[EB/OL]. https://github.com/facebook/Shimmer.