




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
蘇州大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院第14章消息推送點(diǎn)擊添加文本蘇州大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院14.1Android消息推送機(jī)制14.2Android平臺(tái)的消息推送實(shí)現(xiàn)14.3項(xiàng)目實(shí)戰(zhàn):“Android客戶(hù)端實(shí)現(xiàn)推送”14.4相關(guān)閱讀材料14.5本章小結(jié)本章導(dǎo)讀
在開(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ì)比較麻煩。本章主要研究在Android平臺(tái)如何實(shí)現(xiàn)消息推送。14.1Android消息推送機(jī)制 消息推送,就是在互聯(lián)網(wǎng)上通過(guò)定期傳送用戶(hù)需要的信息來(lái)減少信息過(guò)載的一項(xiàng)新技術(shù)。推送技術(shù)通過(guò)自動(dòng)傳送信息給用戶(hù),來(lái)減少用于網(wǎng)絡(luò)上搜索的時(shí)間。它根據(jù)用戶(hù)的興趣來(lái)搜索、過(guò)濾信息,并將其定期推給用戶(hù),幫助用戶(hù)高效率地發(fā)掘有價(jià)值的信息14.1.1推送方式基礎(chǔ)
當(dāng)我們開(kāi)發(fā)需要和服務(wù)器交互的移動(dòng)應(yīng)用時(shí),基本上都需要和服務(wù)器進(jìn)行交互,包括上傳數(shù)據(jù)到服務(wù)器,同時(shí)從服務(wù)器上獲取數(shù)據(jù)。 一般情況下,客戶(hù)端與服務(wù)器之間通訊客戶(hù)端是主動(dòng)的,但這就存在一個(gè)問(wèn)題:一旦服務(wù)器數(shù)據(jù)有更新或者服務(wù)器要下發(fā)通知給客戶(hù)端只能等客戶(hù)端連接的時(shí)候才能實(shí)現(xiàn)。這種方式使消息失去了實(shí)時(shí)性。 使客戶(hù)端能夠?qū)崟r(shí)收到服務(wù)器的消息和通知,有兩種方式,第一種是客戶(hù)端使用Pull(拉)的方式,就是隔一段時(shí)間就去服務(wù)器上獲取一下信息,看是否有更新的信息出現(xiàn)。第二種就是服務(wù)器使用Push(推送)的方式,當(dāng)服務(wù)器端有新信息了,則把最新的信息Push到客戶(hù)端上。 Push方式比Pull方式更優(yōu)越。因?yàn)镻ull方式更費(fèi)客戶(hù)端的網(wǎng)絡(luò)流量和電量,還需要我們的程序不停地去監(jiān)測(cè)服務(wù)端的變化。14.1.2消息推送實(shí)現(xiàn)原理1.輪詢(xún)(Pull)方式客戶(hù)端應(yīng)用定時(shí)與服務(wù)器進(jìn)行連接并查詢(xún)是否有新消息,一旦服務(wù)器有變化則立即同步消息。2.SMS(Push)方式在Android平臺(tái)上,可以通過(guò)攔截SMS消息并且解析消息內(nèi)容來(lái)了解服務(wù)器的意圖,并獲取其顯示內(nèi)容進(jìn)行處理。3.持久連接(Push)方式客戶(hù)端和服務(wù)器之間建立長(zhǎng)久連接,這樣就可以實(shí)現(xiàn)消息的及時(shí)性和實(shí)時(shí)性。14.2Android平臺(tái)的消息推送實(shí)現(xiàn)14.2.1Push在Android平臺(tái)上長(zhǎng)連接的實(shí)現(xiàn) 現(xiàn)在的大多數(shù)移動(dòng)端應(yīng)用都有實(shí)時(shí)得到消息的能力,簡(jiǎn)單來(lái)說(shuō),有發(fā)送消息的主動(dòng)權(quán)和接受消息的被動(dòng)權(quán)。例如:微信、QQ、天氣預(yù)報(bào)等等。這種功能必須涉及Client(客戶(hù)端)和Server(服務(wù)器)
這種功能實(shí)際上就是數(shù)據(jù)同步,同時(shí)要考慮手機(jī)本身、電量、網(wǎng)絡(luò)流量等等限制因素。1.問(wèn)題的提出
通常在移動(dòng)端上有兩個(gè)解決方案:一種是定時(shí)去Server查詢(xún)數(shù)據(jù),通常是使用HTTP協(xié)議來(lái)訪問(wèn)web服務(wù)器,稱(chēng)Polling(輪詢(xún));還有一種是移動(dòng)端和服務(wù)器建立長(zhǎng)連接,使用XMPP長(zhǎng)連接,稱(chēng)Push(推送)。從耗費(fèi)的電量、流量和數(shù)據(jù)延遲性各方面來(lái)說(shuō),Push有明顯的優(yōu)勢(shì)。但是使用Push的缺點(diǎn)是:對(duì)于客戶(hù)端,實(shí)現(xiàn)和維護(hù)相對(duì)成本高,在移動(dòng)無(wú)線網(wǎng)絡(luò)下維護(hù)長(zhǎng)連接,相對(duì)有一些技術(shù)上的開(kāi)發(fā)難度。對(duì)于服務(wù)器,如何實(shí)現(xiàn)多核并發(fā),CPU作業(yè)調(diào)度,數(shù)量龐大的長(zhǎng)連接并發(fā)維護(hù)等技術(shù),仍存在開(kāi)發(fā)難點(diǎn)。講述Push方案的原理前,先了解一下移動(dòng)無(wú)線網(wǎng)絡(luò)的特點(diǎn)。2.移動(dòng)無(wú)線網(wǎng)絡(luò)的特點(diǎn)
因?yàn)镮Pv的IP量有限,運(yùn)營(yíng)商分配給手機(jī)終端的IP是運(yùn)營(yíng)商內(nèi)網(wǎng)的IP,手機(jī)要連接Internet,就需要通過(guò)運(yùn)營(yíng)商的網(wǎng)關(guān)做一個(gè)網(wǎng)絡(luò)地址轉(zhuǎn)換(NetworkAddressTranslation,NAT)。簡(jiǎn)單地說(shuō)運(yùn)營(yíng)商的網(wǎng)關(guān)需要維護(hù)一個(gè)外網(wǎng)IP、端口到內(nèi)網(wǎng)IP、端口的對(duì)應(yīng)關(guān)系,以確保內(nèi)網(wǎng)的手機(jī)可以跟Internet的服務(wù)器通訊。
3.Push在Android平臺(tái)上長(zhǎng)連接的實(shí)現(xiàn)
移動(dòng)端要和Internet進(jìn)行通信,必須通過(guò)運(yùn)營(yíng)商的網(wǎng)關(guān),所以,為了不讓NAT映射表失效,我們需要定時(shí)向Internet發(fā)送數(shù)據(jù),因?yàn)橹皇菫榱瞬蛔孨AT映射表失效,所以只需發(fā)送長(zhǎng)度為0的數(shù)據(jù)即可。 這時(shí)候就要用到定時(shí)器,在Android系統(tǒng)上,定時(shí)器通常有兩種,但在Android客戶(hù)端使用Push推送時(shí),使用AlarmManager來(lái)實(shí)現(xiàn)心跳功能,使其真正實(shí)現(xiàn)長(zhǎng)連接。14.2.2使用Androidpn實(shí)現(xiàn)消息推送 服務(wù)器推送技術(shù),目前應(yīng)用廣泛的大部分都是對(duì)XMPP協(xié)議的再次封裝。qq、gmail、Gtalk、FacebookChat、iMessage等都是基于XMPP協(xié)議的。XMPP是個(gè)成熟的IM(即時(shí)通訊)協(xié)議,基于XML文本方式實(shí)現(xiàn),靈活強(qiáng)大。Androidpn是一個(gè)整合方案,它是基于XMPP開(kāi)源組件的。1.Androidpn Androidpn服務(wù)器端是Java語(yǔ)言實(shí)現(xiàn)的,基于Openfire開(kāi)源工程。不過(guò)它的Web部分采用的是Spring框架。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)求。 Androidpn客戶(hù)端需要用到一個(gè)基于java的開(kāi)源XMPP協(xié)議包asmack,這個(gè)包同樣也是基于Openfire下的另外一個(gè)開(kāi)源項(xiàng)目Smack,我們不需要自己編譯,可以直接把Androidpn客戶(hù)端里面的asmack.jar拿來(lái)使用??蛻?hù)端利用asmack中提供的XMPPConnection類(lèi)與服務(wù)器建立持久連接,并通過(guò)該連接進(jìn)行用戶(hù)注冊(cè)和登錄認(rèn)證,同樣也是通過(guò)這條連接,接收服務(wù)器發(fā)送的通知。14.3項(xiàng)目實(shí)戰(zhàn):“Android客戶(hù)端實(shí)現(xiàn)推送”14.3.1任務(wù)說(shuō)明在Android客戶(hù)端接收推送服務(wù)器管理端推送過(guò)來(lái)的消息。本節(jié)詳細(xì)內(nèi)容在教學(xué)視頻14.4相關(guān)閱讀材料14.4.1幾種常見(jiàn)的消息推送解決方案1.C2DM云端推送 在Android手機(jī)平臺(tái)上,Google提供了C2DM(CloudtoDeviceMessaging)服務(wù)。C2DM是一個(gè)用來(lái)幫助開(kāi)發(fā)者從服務(wù)器向Android應(yīng)用程序發(fā)送數(shù)據(jù)的服務(wù)。該服務(wù)提供了一個(gè)簡(jiǎn)單的、輕量級(jí)的機(jī)制,允許服務(wù)器可以通知移動(dòng)應(yīng)用程序直接與服務(wù)器進(jìn)行通信,以便于從服務(wù)器獲取應(yīng)用程序更新和用戶(hù)數(shù)據(jù)。2.MQTT協(xié)議實(shí)現(xiàn)Android推送。采用MQTT協(xié)議實(shí)現(xiàn)Android推送功能也是一種解決方案。MQTT是一個(gè)輕量級(jí)的消息發(fā)布/訂閱協(xié)議,它是實(shí)現(xiàn)基于手機(jī)客戶(hù)端的消息推送服務(wù)器的理想解決方案。3.RSMB實(shí)現(xiàn)推送功能。ReallySmallMessageBroker(RSMB),是一個(gè)簡(jiǎn)單的MQTT代理,同樣由IBM提供,其查看地址是:。缺省打開(kāi)1883端口,應(yīng)用程序中,它負(fù)責(zé)接收來(lái)自服務(wù)器的消息并將其轉(zhuǎn)發(fā)給指定的移動(dòng)設(shè)備。SAM是一個(gè)針對(duì)MQTT寫(xiě)的PHP庫(kù)??梢詮牡刂废螺d它。send_mqtt.php是一個(gè)通過(guò)POST接收消息并且通過(guò)SAM將消息發(fā)送給RSMB的PHP腳本。4.XMPP協(xié)議實(shí)現(xiàn)Android推送。 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)源Androidpushnotification實(shí)現(xiàn),這是韓國(guó)人放在上的一個(gè)開(kāi)源項(xiàng)目。它包含了完整的客戶(hù)端和服務(wù)器端。其不足之處在于:性能上也不夠穩(wěn)定;如果將消息從服務(wù)器上推送出去,就不再管理了,不管消息是否成功到達(dá)客戶(hù)端手機(jī)上。5.使用第三方平臺(tái)。 目前國(guó)內(nèi)、國(guó)外有一些推送平臺(tái)可供使用,但是涉及到收費(fèi)問(wèn)題、保密問(wèn)題、服務(wù)質(zhì)量問(wèn)題、擴(kuò)展問(wèn)題等等,往往讓我們望而卻步。6.自己搭建一個(gè)推送平臺(tái)。 這不是一件輕松的工作,當(dāng)然可以根據(jù)各自的需要采取合適的方案。 綜合以上論述,在建立Android消息推送方面可謂方案很多,但每一款方案都有其優(yōu)缺點(diǎn)。但無(wú)論如何,還是自己搭建一個(gè)推送平臺(tái)是上策。14.4.2Androidpn所存在的一些問(wèn)題1、Androidpn服務(wù)器收到消息后如何知道要發(fā)給哪個(gè)用戶(hù)?2、一旦服務(wù)器重啟了,客戶(hù)端似乎不會(huì)自動(dòng)重連,需要用戶(hù)自己中斷后臺(tái)Service再重啟應(yīng)用。3、Androidpn服務(wù)器不保存消息。就是說(shuō)它一有消息就會(huì)發(fā)出去,即使客戶(hù)端根本不在線,它也不會(huì)重發(fā)。相應(yīng)的解析是:第一個(gè)問(wèn)題相對(duì)簡(jiǎn)單,要去定制下用戶(hù)體系,業(yè)務(wù)部分的用戶(hù)體系需要與Androidpn對(duì)應(yīng)起來(lái)。第二個(gè)問(wèn)題,是個(gè)小細(xì)節(jié),Androidpn客戶(hù)端沒(méi)有去做這些細(xì)節(jié)。第三個(gè)問(wèn)題是最重要的,Androidpn背后的Openfire是XMPPIM服務(wù)器,消息內(nèi)容是“不會(huì)落地的”,即只在內(nèi)存里保存一下離線消息。如果要生產(chǎn)用,需要考慮改造這里。14.5本章小結(jié) 服務(wù)器推送技術(shù),目前應(yīng)用廣泛的大部分都是對(duì)XMPP協(xié)議的再次封裝。qq、gmail、Gtalk、FacebookChat、iMessage等都是基于XMPP協(xié)議的。XMPP是個(gè)成熟的IM(即時(shí)通訊)協(xié)議,基于XML文本方式實(shí)現(xiàn),靈活強(qiáng)大。Androidpn是一個(gè)整合方案,它是基于XMPP開(kāi)源組件的。 Androidpn服務(wù)器端是Java語(yǔ)言實(shí)現(xiàn)的,基于Openfire開(kāi)源工程。其Web部分采用的是Spring框架。Androidpn服務(wù)器包含兩個(gè)部分,一
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)書(shū) 周以華
- 初中課題立項(xiàng)申報(bào)書(shū)
- 廠房委托招商合同范本
- 省級(jí)高校教改課題申報(bào)書(shū)
- 醫(yī)療維修托管合同范本
- 咨詢(xún)產(chǎn)品服務(wù)合同范本
- 美學(xué)課題申報(bào)書(shū)格式要求
- 研究生課題申報(bào)書(shū)分工
- 出境加工合同范例
- 關(guān)于郵寄合同范本
- 第三單元名著導(dǎo)讀《駱駝祥子》課件部編版語(yǔ)文七年級(jí)下冊(cè)
- 高老師講語(yǔ)文-燈籠-部編版
- 事業(yè)單位個(gè)人德能勤績(jī)廉工作總結(jié)(2篇)
- 《四季的色彩》說(shuō)課 課件
- 《英語(yǔ)詞匯學(xué)》課程教學(xué)大綱
- YS/T 952-2014銅鉬多金屬礦化學(xué)分析方法銅和鉬量的測(cè)定電感耦合等離子體原子發(fā)射光譜法
- GB/T 2305-2000化學(xué)試劑五氧化二磷
- 種族民族與國(guó)家
- 醫(yī)學(xué)細(xì)胞生物學(xué)研究方法及其在中醫(yī)研究中的應(yīng)用課件
- 全國(guó)青少年機(jī)器人技術(shù)等級(jí)考試:一級(jí)培訓(xùn)全套課件
- 四年級(jí)語(yǔ)文下冊(cè)第六單元【集體備課】(教材解讀+教學(xué)設(shè)計(jì))課件
評(píng)論
0/150
提交評(píng)論