http://www./article/256428 應(yīng)用背景 最近,領(lǐng)導(dǎo)讓研究android系統(tǒng)的應(yīng)用開發(fā),于是就開始研究數(shù)據(jù)庫訪問+消息推送+實時視頻播放等基本應(yīng)用,下面主要是android消息推送功能的研究。PS:大家有問題可以隨時私信我,共同學(xué)習(xí)。
消息的推送就是從服務(wù)器端向移動終端發(fā)送連接請求,傳輸特定的信息。例如一些新聞客戶端,每隔一段時間都會受到一條或者多條通知(Notification),這就是從服務(wù)器端傳過來的推送消息。 推送的技術(shù)主要是以下三種: (1)通過SMS(Short Message Service,短信群發(fā)服務(wù)系統(tǒng))進(jìn)行服務(wù)器端和客戶端的交流通信。在Android平臺上,可以通過攔截SMS消息并解析內(nèi)容來了解服務(wù)器的意圖,就可以實現(xiàn)完全的實時操作。但是該方案成本比較高,而且基本依賴運營商。 (2)循環(huán)主動定時獲取。該方法需要客戶端編寫一個定時或者周期性訪問服務(wù)器端接口,從而獲取最新的消息。但是,輪詢的頻率太快會消耗網(wǎng)絡(luò)帶寬和電量,太慢會導(dǎo)致消息更新不及時。 (3)持久連接方案。需要在客戶端開通一個服務(wù)來保持和服務(wù)器端的持久連接(Apple和谷歌的C2DM采用該機制),從而當(dāng)服務(wù)器端有最新的消息時,可以及時接收到通知。但是該方案也會消耗系統(tǒng)的性能和電量,當(dāng)Android系統(tǒng)可用資源較低時,系統(tǒng)會關(guān)閉服務(wù),從而與系統(tǒng)的連接會終端。 相比較其它兩種方案,第三種方案的優(yōu)勢還是比較明顯,而且可行性最高。在Android系統(tǒng)軟件中編寫系統(tǒng)服務(wù)或開機啟動功能,當(dāng)系統(tǒng)資源利用率較低而關(guān)閉服務(wù)器時,可以再重啟該服務(wù),進(jìn)而實現(xiàn)持久連接的方式。使用谷歌的C2DM(Android Cloud to Device Message)應(yīng)該是實現(xiàn)PUSH消息的最便捷方式,但是C2DM必須依賴谷歌的服務(wù)器,國內(nèi)網(wǎng)絡(luò)無法正常使用。 目前,有兩種較好的方式可以實現(xiàn)這種持久連接的功能,一種是IBM的MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)協(xié)議實現(xiàn)PUSH消息功能,第二種是采用基于XMPP協(xié)議的第三方Androidpn實現(xiàn)消息推送。
MQTT是IBM開發(fā)的一個即時通信協(xié)議,該協(xié)議支持所有平臺,可以將所有物聯(lián)網(wǎng)設(shè)備和外部連接起來,被用來當(dāng)作傳感器和致動器的通信協(xié)議。 使用它作為消息推送協(xié)議的基本原理是:使用消息代理服務(wù)器(Message Broker),客戶端連接上消息代理服務(wù)器,跟服務(wù)器協(xié)商可以接受哪些類型的消息,同時也可以發(fā)布自己的消息,這些消息根據(jù)協(xié)議的內(nèi)容可以被其它客戶端收到,業(yè)務(wù)流程如圖1所示。 <!--[if gte vml 1]><!--[if !vml]--><!--[endif]--><!--[if gte mso 9]> 關(guān)鍵技術(shù) 通知功能的實現(xiàn)1. Apollo服務(wù)器的安裝和配置想要實現(xiàn)基于MQTT的消息推送功能,必須先配置message broker服務(wù)器,這里選擇服務(wù)器Apollo1.7來搭建環(huán)境。具體的搭建主要分為下面幾個步驟: (1)先到官方網(wǎng)站現(xiàn)在最新版的Apollo1.7服務(wù)器。
(2)然后運行apollo.cmd 創(chuàng)建服務(wù)器實例。
(3)在服務(wù)器實例的文件夾下面配置參數(shù)。
(4)運行apollo-broker.cmd run開啟服務(wù)器,在瀏覽器中輸入服務(wù)器的IP地址,即可以訪問Apollo服務(wù)器界面。
(5)輸入之前配置好的用戶名和密碼參數(shù),即可以訪問Apollo Console控制臺。
2. MQTT客戶端的實現(xiàn)使用WebService服務(wù)器向Android端發(fā)送通知,實際上可以看成是兩個MQTT 客戶端之間的通信過程,消息在傳播過程中間經(jīng)過了Message Broker服務(wù)器的轉(zhuǎn)發(fā),所以需要在WebService服務(wù)器和Android端分別配置MQTT客戶端。兩邊的代碼實現(xiàn)過程基本一致,都是要在工程中導(dǎo)入mqtt-client-0.4.0.jar的類庫,然后要使用如下圖這些工具類實現(xiàn)MQTT功能。
具體的代碼可以參考:
|
|