Android 服務(wù)器推送技術(shù)_第1頁(yè)
Android 服務(wù)器推送技術(shù)_第2頁(yè)
Android 服務(wù)器推送技術(shù)_第3頁(yè)
Android 服務(wù)器推送技術(shù)_第4頁(yè)
Android 服務(wù)器推送技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、在開(kāi)發(fā)Android和iPhone應(yīng)用程序時(shí),我們往往需要從服務(wù)器不定的向手機(jī)客戶(hù)端即時(shí)推送各種通知消息,iPhone上已經(jīng)有了比較簡(jiǎn)單的和完美的推送通知解決方案,可是Android平臺(tái)上實(shí)現(xiàn)起來(lái)卻相對(duì)比較麻煩,最近利用幾天的時(shí)間對(duì)Android的推送通知服務(wù)進(jìn)行初步的研究。在Android手機(jī)平臺(tái)上,Google提供了C2DM(Cloudto Device Messaging)服務(wù),起初我就是準(zhǔn)備采用這個(gè)服務(wù)來(lái)實(shí)現(xiàn)自己手機(jī)上的推送功能。Android Cloud to Device Messaging (C2DM)是一個(gè)用來(lái)幫助開(kāi)發(fā)者從服務(wù)器向Android應(yīng)用程序發(fā)送數(shù)據(jù)的服務(wù)。該服務(wù)提供

2、了一個(gè)簡(jiǎn)單的、輕量級(jí)的機(jī)制,允許服務(wù)器可以通知移動(dòng)應(yīng)用程序直接與服務(wù)器進(jìn)行通信,以便于從服務(wù)器獲取應(yīng)用程序更新和用戶(hù)數(shù)據(jù)。C2DM服務(wù)負(fù)責(zé)處理諸如消息排隊(duì)等事務(wù)并向運(yùn)行于目標(biāo)設(shè)備上的應(yīng)用程序分發(fā)這些消息。但是經(jīng)過(guò)一番研究發(fā)現(xiàn),這個(gè)服務(wù)存在很大的問(wèn)題:1)C2DM內(nèi)置于Android的2.2系統(tǒng)上,無(wú)法兼容老的1.6到2.1系統(tǒng);2)C2DM需要依賴(lài)于Google官方提供的C2DM服務(wù)器,由于國(guó)內(nèi)的網(wǎng)絡(luò)環(huán)境,這個(gè)服務(wù)經(jīng)常不可用,如果想要很好的使用,我們的App Server必須也在國(guó)外,這個(gè)恐怕不是每個(gè)開(kāi)發(fā)者都能夠?qū)崿F(xiàn)的;有了上述兩個(gè)使用上的制約,導(dǎo)致我最終放棄了這個(gè)方案,不過(guò)我想利用另外一篇文

3、章來(lái)詳細(xì)的介紹C2DM的框架以及客戶(hù)端和App Server的相應(yīng)設(shè)置方法,可以作為學(xué)習(xí)與參考之用。即然C2DM無(wú)法滿(mǎn)足我們的要求,那么我們就需要自己來(lái)實(shí)現(xiàn)Android手機(jī)客戶(hù)端與App Server之間的通信協(xié)議,保證在App Server想向指定的Android設(shè)備發(fā)送消息時(shí),Android設(shè)備能夠及時(shí)的收到。下面我來(lái)介紹幾種常見(jiàn)的方案:1)輪詢(xún):應(yīng)用程序應(yīng)當(dāng)階段性的與服務(wù)器進(jìn)行連接并查詢(xún)是否有新的消息到達(dá),你必須自己實(shí)現(xiàn)與服務(wù)器之間的通信,例如消息排隊(duì)等。而且你還要考慮輪詢(xún)的頻率,如果太慢可能導(dǎo)致某些消息的延遲,如果太快,則會(huì)大量消耗網(wǎng)絡(luò)帶寬和電池。2)SMS:在Android平臺(tái)上,

4、你可以通過(guò)攔截SMS消息并且解析消息內(nèi)容來(lái)了解服務(wù)器的意圖。這是一個(gè)不錯(cuò)的想法,我就見(jiàn)過(guò)采用這個(gè)方案的應(yīng)用程序。這個(gè)方案的好處是,可以實(shí)現(xiàn)完全的實(shí)時(shí)操作。但是問(wèn)題是這個(gè)方案的成本相對(duì)比較高,你很難找到免費(fèi)的短消息發(fā)送網(wǎng)關(guān),關(guān)于這個(gè)方案的實(shí)現(xiàn),可以參考如下鏈接:。3)持久連接:這個(gè)方案可以解決由輪詢(xún)帶來(lái)的性能問(wèn)題,但是還是會(huì)消耗手機(jī)的電池。Apple的推送服務(wù)之所以工作的很好,是因?yàn)槊恳慌_(tái)手機(jī)僅僅保持一個(gè)與服務(wù)器之間的連接,事實(shí)上C2DM也是這么工作的。不過(guò)這個(gè)方案也存在不足,就是我們很難在手機(jī)上實(shí)現(xiàn)一個(gè)可靠的服務(wù)。Android操作系統(tǒng)允許在低內(nèi)存情況下殺死系統(tǒng)服務(wù),所以你的通知服務(wù)很可能被操

5、作系統(tǒng)Kill掉了。前兩個(gè)方案存在明顯的不足,第三個(gè)方案也有不足,不過(guò)我們可以通過(guò)良好的設(shè)計(jì)來(lái)彌補(bǔ),以便于讓該方案可以有效的工作。畢竟,我們要知道GMail,GTalk以及GoogleVoice都可以實(shí)現(xiàn)實(shí)時(shí)更新的。 Ø  采用MQTT協(xié)議實(shí)現(xiàn)Android推送MQTT是一個(gè)輕量級(jí)的消息發(fā)布/訂閱協(xié)議,它是實(shí)現(xiàn)基于手機(jī)客戶(hù)端的消息推送服務(wù)器的理想解決方案。我們可以從這里下載該項(xiàng)目的實(shí)例代碼,并且可以找到一個(gè)采用PHP書(shū)寫(xiě)的服務(wù)器端實(shí)現(xiàn)。架構(gòu)如下所示:wmqtt.jar 是IBM提供的MQTT協(xié)議的實(shí)現(xiàn)。你可以從如下站點(diǎn)下載它。你可以將該jar包

6、加入你自己的Android應(yīng)用程序中。Really Small Message Broker (RSMB) ,他是一個(gè)簡(jiǎn)單的MQTT代理,同樣由IBM提供。缺省打開(kāi)1883端口,應(yīng)用程序當(dāng)中,它負(fù)責(zé)接收來(lái)自服務(wù)器的消息并將其轉(zhuǎn)發(fā)給指定的移動(dòng)設(shè)備。SAM是一個(gè)針對(duì)MQTT寫(xiě)的PHP庫(kù)。你可以從這個(gè)下載它.send_mqtt.php是一個(gè)通過(guò)POST接收消息并且通過(guò)SAM將消息發(fā)送給RSMB的PHP腳本。實(shí)例代碼:可以從GitHub上下載實(shí)例應(yīng)用。運(yùn)行該應(yīng)用以后,通過(guò)手機(jī)瀏覽器訪問(wèn) Push Message”按鈕,你就應(yīng)該可以看到手機(jī)上收到了通知了。你也可以從這個(gè)GitHub地址上下載a

7、ndroid-push源代碼,它包含了send_mqtt.php腳本。 Ø  采用XMPP協(xié)議實(shí)現(xiàn)Android推送這是我在項(xiàng)目中采用的方案。事實(shí)上Google官方的C2DM服務(wù)器底層也是采用XMPP協(xié)議進(jìn)行的封裝。XMPP(可擴(kuò)展通訊和表示協(xié)議)是基于可擴(kuò)展標(biāo)記語(yǔ)言(XML)的協(xié)議,它用于即時(shí)消息(IM)以及在線探測(cè)。這個(gè)協(xié)議可能最終允許因特網(wǎng)用戶(hù)向因特網(wǎng)上的其他任何人發(fā)送即時(shí)消息。androidpn是一個(gè)基于XMPP協(xié)議的java開(kāi)源Android push notification實(shí)現(xiàn)。它包含了完整的客戶(hù)端和服務(wù)器端。經(jīng)過(guò)源代碼研究我發(fā)現(xiàn),該服務(wù)器

8、端基本是在另外一個(gè)開(kāi)源工程openfire基礎(chǔ)上修改實(shí)現(xiàn)的,不過(guò)比較郁悶的是androidpn的文檔是由韓語(yǔ)寫(xiě)的,所以整個(gè)研究過(guò)程基本都是讀源碼。它的實(shí)現(xiàn)示意圖如下:androidpn客戶(hù)端需要用到一個(gè)基于java的開(kāi)源XMPP協(xié)議包asmack,這個(gè)包同樣也是基于openfire下的另外一個(gè)開(kāi)源項(xiàng)目smack,不過(guò)我們不需要自己編譯,可以直接把a(bǔ)ndroidpn客戶(hù)端里面的asmack.jar拿來(lái)使用??蛻?hù)端利用asmack中提供的XMPPConnection類(lèi)與服務(wù)器建立持久連接,并通過(guò)該連接進(jìn)行用戶(hù)注冊(cè)和登錄認(rèn)證,同樣也是通過(guò)這條連接,接收服務(wù)器發(fā)送的通知。androidpn服務(wù)器端也是

9、java語(yǔ)言實(shí)現(xiàn)的,基于openfire開(kāi)源工程,不過(guò)它的Web部分采用的是spring框架,這一點(diǎn)與openfire是不同的。Androidpn服務(wù)器包含兩個(gè)部分,一個(gè)是偵聽(tīng)在5222端口上的XMPP服務(wù),負(fù)責(zé)與客戶(hù)端的XMPPConnection類(lèi)進(jìn)行通信,作用是用戶(hù)注冊(cè)和身份認(rèn)證,并發(fā)送推送通知消息。另外一部分是Web服務(wù)器,采用一個(gè)輕量級(jí)的HTTP服務(wù)器,負(fù)責(zé)接收用戶(hù)的Web請(qǐng)求。服務(wù)器架構(gòu)如下:最上層包含四個(gè)組成部分,分別是SessionManager,Auth Manager,PresenceManager以及Notification Manager。SessionManager負(fù)責(zé)管理客戶(hù)端與服務(wù)器之間的會(huì)話(huà),Auth Manager負(fù)責(zé)客戶(hù)端用戶(hù)認(rèn)證管理,Presence Manager負(fù)責(zé)管理客戶(hù)端用戶(hù)的登錄狀態(tài),NotificationManager負(fù)責(zé)實(shí)現(xiàn)服務(wù)器向客戶(hù)端推送消息功能。服務(wù)器端界面如下,分別對(duì)應(yīng)了上述的幾個(gè)功能模塊:      發(fā)送以后,我們可以在手機(jī)端看到接收的消息:      這個(gè)解決方案的最大優(yōu)勢(shì)就是簡(jiǎn)單,我們不需要象C2DM那樣依賴(lài)操作系統(tǒng)版本,也不會(huì)擔(dān)心某一天Google服務(wù)器不可用。利

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論