首頁 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

交流區(qū) | 測硬件 | 網(wǎng)站活動 | Z幣中心

新手入門 / 進(jìn)階 / 社區(qū)互助

新手 | 你問我答 | 免費(fèi)刷機(jī)救磚 | ROM固件

查看: 8611|回復(fù): 0
上一主題 下一主題

如何在Android中實(shí)現(xiàn)推送

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
7        當(dāng)我們開發(fā)需要和服務(wù)器交互的應(yīng)用程序時,基本上都需要獲取服務(wù)器端的數(shù)據(jù),比如《地震應(yīng)急通》就需要及時獲取服務(wù)器上最新的地震信息。要獲取服務(wù)器 上不定時更新的信息一般來說有兩種方法,第一種是客戶端使用Pull(拉)的方式,隔一段時間就去服務(wù)器上獲取信息,看是否有更新的信息出現(xiàn)。第二種就是 服務(wù)器使用Push(推送)的方式,當(dāng)服務(wù)器端有新信息了,則把最新的信息Push到客戶端上。?   
   
        雖然Pull和Push兩種方式都能實(shí)現(xiàn)獲取服務(wù)器端更新信息的功能,但是明顯來說Push is better than pull。因為Pull方式更費(fèi)客戶端的網(wǎng)絡(luò)流量,更主要的是費(fèi)電量。??   
   
        在開發(fā)Android和iPhone應(yīng)用程序時,我們往往需要從服務(wù)器不定的向手機(jī)客戶端即時推送各種通知消息,iPhone上已經(jīng)有了比較簡單的和完美的推送通知解決方案,我會在以后詳細(xì)介紹IPhone中的解決方案,可是Android平臺上實(shí)現(xiàn)起來卻相對比較麻煩,最近利用幾天的時間對Android的推送通知服務(wù)進(jìn)行初步的研究。 在Android手機(jī)平臺上,Google提供了C2DM(Cloudto Device Messaging)服務(wù),起初我就是準(zhǔn)備采用這個服務(wù)來實(shí)現(xiàn)自己手機(jī)上的推送功能。??   
   
        Android Cloud to Device Messaging (C2DM)是一個用來幫助開發(fā)者從服務(wù)器向Android應(yīng)用程序發(fā)送數(shù)據(jù)的服務(wù)。該服務(wù)提供了一個簡單的、輕量級的機(jī)制,允許服務(wù)器可以通知移動應(yīng)用程序直接與服務(wù)器進(jìn)行通信,以便于從服務(wù)器獲取應(yīng)用程序更新和用戶數(shù)據(jù)。C2DM服務(wù)負(fù)責(zé)處理諸如消息排隊等事務(wù)并向運(yùn)行于目標(biāo)設(shè)備上的應(yīng)用程序分發(fā)這些消息。關(guān)于C2DM具體使用過程,這里大家先了解下大致方案情況。   
     
   
但是經(jīng)過一番研究發(fā)現(xiàn),這個服務(wù)存在很大的問題:     
        1)C2DM內(nèi)置于Android的2.2系統(tǒng)上,無法兼容老的1.6到2.1系統(tǒng);   
   
        2)C2DM需要依賴于Google官方提供的C2DM服務(wù)器,由于國內(nèi)的網(wǎng)絡(luò)環(huán)境,這個服務(wù)經(jīng)常不可用,如果想要很好的使用,我們的App Server必須也在國外,這個恐怕不是每個開發(fā)者都能夠?qū)崿F(xiàn)的; 有了上述兩個使用上的制約,導(dǎo)致我最終放棄了這個方案,不過我想利用另外一篇文章來詳細(xì)的介紹C2DM的框架以及客戶端和App Server的相應(yīng)設(shè)置方法,可以作為學(xué)習(xí)與參考之用。 即然C2DM無法滿足我們的要求,那么我們就需要自己來實(shí)現(xiàn)Android手機(jī)客戶端與App Server之間的通信協(xié)議,保證在App Server想向指定的Android設(shè)備發(fā)送消息時,Android設(shè)備能夠及時的收到。   
           
           
         1)輪詢(Pull):應(yīng)用程序應(yīng)當(dāng)階段性的與服務(wù)器進(jìn)行連接并查詢是否有新的消息到達(dá),你必須自己實(shí)現(xiàn)與服務(wù)器之間的通信,例如消息排隊等。而且你還要考慮輪詢的頻率,如果太慢可能導(dǎo)致某些消息的延遲,如果太快,則會大量消耗網(wǎng)絡(luò)帶寬和電池。   
   
        2)SMS(Push):在Android平臺上,你可以通過攔截SMS消息并且解析消息內(nèi)容來了解服務(wù)器的意圖。這是一個不錯的想法,我就見過采 用這個方案的應(yīng)用程序。這個方案的好處是,可以實(shí)現(xiàn)完全的實(shí)時操作。但是問題是這個方案的成本相對比較高,你很難找到免費(fèi)的短消息發(fā)送網(wǎng)關(guān),關(guān)于這個方案的實(shí)現(xiàn)。   
   
        3)持久連接(Push):這個方案可以解決由輪詢帶來的性能問題,但是還是會消耗手機(jī)的電池。Apple的推送服務(wù)之所以工作的很好,是因為每一 臺手機(jī)僅僅保持一個與服務(wù)器之間的連接,事實(shí)上C2DM也是這么工作的。不過這個方案也存在不足,就是我們很難在手機(jī)上實(shí)現(xiàn)一個可靠的服務(wù)。   
   
           
        Android操作系統(tǒng)允許在低內(nèi)存情況下殺死系統(tǒng)服務(wù),所以你的通知服務(wù)很可能被操作系統(tǒng)Kill掉了。 前兩個方案存在明顯的不足,第三個方案也有不足,不過我們可以通過良好的設(shè)計來彌補(bǔ),以便于讓該方案可以有效的工作。畢竟,我們要知道GMail,GTalk以及GoogleVoice都可以實(shí)現(xiàn)實(shí)時更新的。   
   
           
        采用MQTT協(xié)議實(shí)現(xiàn)Android推送 MQTT是一個輕量級的消息發(fā)布/訂閱協(xié)議,它是實(shí)現(xiàn)基于手機(jī)客戶端的消息推送服務(wù)器的理想解決方案。 wmqtt.jar 是IBM提供的MQTT協(xié)議的實(shí)現(xiàn)。我們可以從這里下載該項目的實(shí)例代碼,并且可以找到一個采用PHP書寫的 是IBM提供的MQTT協(xié)議的實(shí)現(xiàn)。我們可以從如下站點(diǎn)下載它。你可以將該jar包加入你自己的Android應(yīng)用程序中。   
   
           
        Really Small Message Broker (RSMB) ,他是一個簡單的MQTT代理,同樣由IBM提供。缺省打開1883端口,應(yīng)用程序當(dāng)中,它負(fù)責(zé)接收來自服務(wù)器的消息并將其轉(zhuǎn)發(fā)給指定的移動設(shè)備。   
   
        SAM是一個針對MQTT寫的PHP庫。我們可以從這個下載它.   
   
        send_mqtt.php是一個通過POST接收消息并且通過SAM將消息發(fā)送給RSMB的PHP腳本。     
   
        Really Small Message Broker (RSMB) ,他是一個簡單的MQTT代理,同樣由IBM提供。缺省打開1883端口,應(yīng)用程序當(dāng)中,它負(fù)責(zé)接收來自服務(wù)器的消息并將其轉(zhuǎn)發(fā)給指定的移動設(shè)備。   
   

上一篇:跨進(jìn)程訪問AIDL
下一篇:《安卓開發(fā)學(xué)習(xí)筆記&教程》--------新人發(fā)帖
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號 )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號

GMT+8, 2024-12-22 14:51 , Processed in 0.059790 second(s), 16 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表