摘 要:針對(duì)Android平臺(tái)消息推送協(xié)議的需求,研究了XMPP協(xié)議的結(jié)構(gòu)、地址格式及消息格式,對(duì)比分析了Android平臺(tái)上其他消息推送方案,設(shè)計(jì)并實(shí)現(xiàn)了一款基于XMPP協(xié)議的通信應(yīng)用程序,驗(yàn)證了使用效果。
關(guān)鍵詞:Android系統(tǒng);XMPP;消息推送;AndroidPN
中圖分類號(hào):TP311.1
隨著信息技術(shù)的高速發(fā)展,移動(dòng)互聯(lián)網(wǎng)絡(luò)已經(jīng)成為人們有效獲取信息的一個(gè)絕佳平臺(tái)。服務(wù)器端消息如何及時(shí)或定時(shí)地發(fā)送給預(yù)定用戶成為研究的熱點(diǎn),消息推送由此應(yīng)運(yùn)而生。所謂推送技術(shù)是一種基于客戶端服務(wù)器機(jī)制,由服務(wù)器主動(dòng)將消息發(fā)往客戶端的技術(shù),其優(yōu)點(diǎn)在于消息發(fā)送的主動(dòng)性和及時(shí)性。該技術(shù)將原先用戶查詢信息的主動(dòng)方式轉(zhuǎn)變成為用戶等待服務(wù)器主動(dòng)推送信息的偽被動(dòng)方式,從本質(zhì)上改變了網(wǎng)絡(luò)信息的服務(wù)方式。本文通過對(duì)比分析國(guó)內(nèi)現(xiàn)有的Android平臺(tái)下幾種服務(wù)器消息推送技術(shù)的解決方案,確定使用基于XMPP(The Extensible Messaging and Presence Protocol)協(xié)議的消息推送技術(shù),設(shè)計(jì)和實(shí)現(xiàn)Android平臺(tái)下的通信應(yīng)用程序。
1 相關(guān)工作
近年來,推送技術(shù)已從瀏覽器領(lǐng)域擴(kuò)展至移動(dòng)物聯(lián)網(wǎng)領(lǐng)域,并得到了快速發(fā)展。在移動(dòng)終端下,推送技術(shù)的方式主要有四種:?jiǎn)屋喸兎绞?、短信服?wù)(SMS)方式、持久連接方式和長(zhǎng)輪詢方式。由于Android操作系統(tǒng)在內(nèi)存占有率較高的情況下會(huì)自動(dòng)殺死系統(tǒng)服務(wù),所以運(yùn)行的移動(dòng)終端推送服務(wù)很有可能會(huì)被系統(tǒng)關(guān)掉。因此,考慮到服務(wù)器資源消耗和電量消耗,持久連接和長(zhǎng)輪詢方式在某種程度下不能滿足應(yīng)用需要,而簡(jiǎn)單輪詢和SMS也存在著明顯的不足。為了彌補(bǔ)這些不足,國(guó)內(nèi)外學(xué)者提出了一些專門針對(duì)Android平臺(tái)消息推送的方案:C2DM云端推送、MQTT協(xié)議實(shí)現(xiàn)推送和XMPP協(xié)議實(shí)現(xiàn)推送,其中XMPP成熟、強(qiáng)大、可擴(kuò)展性強(qiáng),且有開源的Java版的開發(fā)實(shí)例AndroidPN,因此本文擬采用XMPP協(xié)議推送方案進(jìn)行系統(tǒng)實(shí)現(xiàn)。
2 系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)架構(gòu)設(shè)計(jì)
客戶端:基于Android平臺(tái)進(jìn)行開發(fā),通過服務(wù)器實(shí)現(xiàn)Android客戶端之間或與Spark客戶端之間的即時(shí)通信。服務(wù)器端:采用開源的Openfire作為服務(wù)器。當(dāng)客戶端發(fā)出連接請(qǐng)求到服務(wù)器,服務(wù)器對(duì)每個(gè)客戶端的連接進(jìn)行認(rèn)證,認(rèn)證通過的客戶端能進(jìn)行彼此通信。系統(tǒng)總體架構(gòu)包括服務(wù)器端、客戶端、外部即時(shí)通信網(wǎng)關(guān)三個(gè)部分。
2.2 XMPP體系結(jié)構(gòu)
其中,S1,S2表示XMPP服務(wù)器端;C1,C2,C3表示XMPP客戶端;G1表示在XMPP協(xié)議與使用外部的消息網(wǎng)絡(luò)的協(xié)議之間相互轉(zhuǎn)換的網(wǎng)絡(luò);FC1表示外部的消息通信網(wǎng)絡(luò)的客戶端部分;FN1表示外部的消息通信網(wǎng)絡(luò)。
2.3 XMPP地址格式
一個(gè)實(shí)體可以是任意一個(gè)被認(rèn)為的網(wǎng)絡(luò)端點(diǎn),而且它是通過XMPP協(xié)議進(jìn)行相互通信的。每個(gè)實(shí)體都有相應(yīng)的實(shí)體地址(Jabber indentifier,JID)。一個(gè)有效的JID包括域名(domain)、節(jié)點(diǎn)(node)、資源(resource)三元素,其格式為:
JID=[node”@”]domain[“/”resource]
2.4 XMPP消息格式
XMPP系統(tǒng)中不同的實(shí)體之間相互傳遞數(shù)據(jù)是通過XML流來完成的。當(dāng)兩個(gè)實(shí)體連接后,XML流通過從一個(gè)實(shí)體傳送到另一個(gè)實(shí)體來進(jìn)行數(shù)據(jù)交換。在實(shí)體之間,有三個(gè)頂層的XML元素:,和,每一個(gè)都包括子節(jié)點(diǎn)和屬性。
3 系統(tǒng)實(shí)現(xiàn)
3.1 搭建AndroidPN推送平臺(tái)
AndroidPN推送平臺(tái)的搭建步驟如下:(1)下載AndroidPN源碼服務(wù)端和客戶端;(2)用myeclipse導(dǎo)入AndroidPN server即服務(wù)端,打開jdbc.properties文件,修改jdbcurl項(xiàng)為:jdbc:mysql://localhost/apn?useUnicode=truecharacterEncoding=utf8,修改jdbcusername和jdbcpassword為MySql的連接賬號(hào)和密碼;(3)運(yùn)行并導(dǎo)出war文件,上傳到tomcat服務(wù)器。
3.2 配置AndroidPN
下載AndroidPN-client-0.5.0.zip和AndroidPN-server-0.5.0-bin.zip并解壓,Eclipse導(dǎo)入client,配置好目標(biāo)平臺(tái),打開res/raw/AndroidPN.properties文件,配置客戶端程序。
3.3 服務(wù)端調(diào)用接口實(shí)現(xiàn)
AndroidPN Server平臺(tái)搭建好后可以實(shí)現(xiàn)手動(dòng)信息推送,如果要實(shí)現(xiàn)應(yīng)用程序自動(dòng)調(diào)用推送服務(wù)來實(shí)現(xiàn)信息的自動(dòng)推送,則需要自己寫調(diào)用接口。(1)在AndroidPN Server創(chuàng)建ApiController類,用于接收應(yīng)用程序Post過來的數(shù)據(jù),并且將消息推送出去;(2)應(yīng)用程序調(diào)用,應(yīng)用程序可以通過接口調(diào)用來實(shí)現(xiàn)消息的自動(dòng)推送。以asp.net調(diào)用為例,代碼如下:
public string SendMessage(string broadcast, string username, string title,string message, string uri)
{string data;
data=\"broadcast=\"+broadcast+\"username=\"+username+\"title=\"+title+\"message=\"+message+\"uri=\"+uri;
WebRequest req=WebRequest.Create(\"IP/AndroidPN/api.do?action=api_send_message\");
req.ContentType=\"application/x-www-form-urlencoded\";
req.Method=\"POST\";
byte[]bytes=Encoding.UTF8.GetBytes(data);
req.ContentLength=bytes.Length;
HttpWebResponse res=req.GetResponse()as HttpWebResponse;
string htmlResult=sr.ReadToEnd();
return htmlResult;}
3.4 客戶端消息通知的顯示實(shí)現(xiàn)
(1)獲得NotificationManager對(duì)象,這是一個(gè)通知管理器;(2)構(gòu)建一個(gè)Notification對(duì)象,這個(gè)Notification對(duì)象描述了,通知的標(biāo)題和內(nèi)容,通知要調(diào)用的窗體;(3)調(diào)用NotificationManager.notify方法發(fā)起通知,發(fā)起后的通知就會(huì)在消息欄提示。
4 結(jié)束語
本文研究了XMPP協(xié)議的網(wǎng)絡(luò)結(jié)構(gòu)、地址格式和消息格式,使用此協(xié)議設(shè)計(jì)了一款基于XMPP協(xié)議的即時(shí)通信應(yīng)用模型,在Android平臺(tái)上給予了實(shí)現(xiàn),并驗(yàn)證了使用效果。XMPP協(xié)議作為一款成熟、強(qiáng)大、可擴(kuò)展性強(qiáng)的協(xié)議,其在手機(jī)上的發(fā)展前景十分可觀。
參考文獻(xiàn):
[1]王美妮,王穎.基于XMPP協(xié)議消息推送機(jī)制的研究與實(shí)現(xiàn)[J].長(zhǎng)春師范學(xué)院學(xué)報(bào)(自然科學(xué)版).2014(01),27-31.
作者簡(jiǎn)介:常新峰(1982-),男,河南周口人,碩士研究生,助教,主要研究方向:無線傳感器網(wǎng)絡(luò);呂樂樂(1983-),男,回族,河南漯河人,碩士研究生,助教,主要研究方向:計(jì)算機(jī)網(wǎng)絡(luò)。
作者單位:平頂山學(xué)院 網(wǎng)絡(luò)計(jì)算中心,河南平頂山 467000