Android開發(fā)之推送

工信部將統(tǒng)一安卓推送標(biāo)準(zhǔn)
推送疯溺,目前幾乎是APP的標(biāo)配了。我們來看看推送這件事派近。

推送的實(shí)現(xiàn)方案

總結(jié)一下幾種推送實(shí)現(xiàn)方式(歷史解決方案),目前已經(jīng)被廢棄掉了,了解一下還是有必要的钾虐。

1.輪詢

應(yīng)用程序階段性的與服務(wù)器進(jìn)行連接并查詢是否有新的消息到達(dá),必須自己實(shí)現(xiàn)與服務(wù)器之間的通信梗搅,例如消息排隊(duì)等禾唁。而且還要考慮輪詢的頻率,如果太慢可能導(dǎo)致某些消息的延遲无切,如果太快荡短,則會(huì)大量消耗網(wǎng)絡(luò)帶寬和電池。

優(yōu)點(diǎn):實(shí)現(xiàn)簡單
實(shí)現(xiàn):用Timer和TimerTask定時(shí)器哆键,以及HTTP相關(guān)的幾個(gè)類就可以實(shí)現(xiàn)基本的功能掘托,然后自己解析服務(wù)器返回信息。

2.SMS短信

在Android平臺上籍嘹,可以通過攔截SMS消息并且解析消息內(nèi)容來了解服務(wù)器的意圖闪盔。這是一個(gè)不錯(cuò)的想法,我就見過采用這個(gè)方案的應(yīng)用程序辱士。這個(gè)方案的好處是泪掀,可以實(shí)現(xiàn)實(shí)時(shí)操作。但是問題是這個(gè)方案的成本相對比較高颂碘,很難找到免費(fèi)的短消息發(fā)送網(wǎng)關(guān)异赫。

優(yōu)點(diǎn):實(shí)現(xiàn)簡單,實(shí)時(shí)性也好头岔。
缺點(diǎn):SMS服務(wù)的成本問題塔拳。

3.TCP/IP持久的長連接

這個(gè)方案可以解決由輪詢帶來的性能問題,但是還是會(huì)消耗手機(jī)的電池峡竣。Apple的推送服務(wù)之所以工作的很好(使用APNs(Apple Push Notification service)進(jìn)行推送)靠抑,是因?yàn)槊恳慌_手機(jī)僅僅保持一個(gè)與服務(wù)器之間的連接,事實(shí)上C2DM也是這么工作的适掰。不過這個(gè)方案也存在不足颂碧,就是我們很難在手機(jī)上實(shí)現(xiàn)一個(gè)可靠的服務(wù)荠列。Android操作系統(tǒng)允許在低內(nèi)存情況下殺死系統(tǒng)服務(wù),所以通知服務(wù)很可能被操作系統(tǒng)Kill掉了稚伍。

優(yōu)點(diǎn):實(shí)時(shí)性好弯予。
缺點(diǎn):實(shí)現(xiàn)起來比較困難。比較費(fèi)電个曙。

總結(jié):
Android操作系統(tǒng)允許在低內(nèi)存情況下殺死系統(tǒng)服務(wù)锈嫩,所以我們的推送通知服務(wù)很有可能就被操作系統(tǒng)Kill掉了。輪詢方式和SMS方式這兩個(gè)方案也存在明顯的不足垦搬。至于持久連接方案也有不足呼寸,不過我們可以通過良好的設(shè)計(jì)來彌補(bǔ),以便于讓該方案可以有效的工作猴贰。畢竟对雪,我們要知道GMail,GTalk 米绕,GoogleVoice以及我們熟悉的微信瑟捣,QQ都可以實(shí)現(xiàn)實(shí)時(shí)更新的。

具體實(shí)現(xiàn)長連接解決方案

C2DM,GCM

Google提供了C2DM(Cloudto Device Messaging)服務(wù)(基于XMPP)栅干,GCM(Google Cloud Messaging)作為 Google 官方的推送支持的

優(yōu)點(diǎn):谷歌提供的
缺點(diǎn):C2DM需要依賴于Google官方提供的C2DM服務(wù)器迈套,由于國內(nèi)的網(wǎng)絡(luò)環(huán)境,這兩個(gè)個(gè)服務(wù)經(jīng)常不可用碱鳞,如果想要很好的使用桑李,我們的app服務(wù)器必須也在國外。并且需要手機(jī)安裝了Google Service 窿给,條件比較苛刻贵白。可能不是每個(gè)開發(fā)者或公司能實(shí)現(xiàn)的崩泡。

MQTT協(xié)議實(shí)現(xiàn)Android推送功能

采用MQTT協(xié)議實(shí)現(xiàn)Android推送功能也是一種解決方案禁荒。MQTT是一個(gè)輕量級的消息發(fā)布/訂閱協(xié)議,它是實(shí)現(xiàn)基于手機(jī)客戶端的消息推送服務(wù)器的理想解決方案角撞。IBM提供的MQTT協(xié)議的實(shí)現(xiàn)圈浇。

客戶端地址
https://github.com/tokudu/AndroidPushNotificationsDemo
服務(wù)器端地址
https://github.com/tokudu/PhpMQTTClient
wmqtt.jar
http://www-01.ibm.com/support/docview.wss?rs=171&uid=swg24006006

RSMB實(shí)現(xiàn)推送功能

Really Small Message Broker (RSMB) ,他是一個(gè)簡單的MQTT代理靴寂,同樣由IBM提供。

Xmpp(可擴(kuò)展通訊和表示協(xié)議)

簡介:XMPP(Extensible Messaging and Presence Protocol)
百度文庫介紹:http://wenku.baidu.com/view/563b1ebff121dd36a32d8225.html

xmpp協(xié)議起源于著名的Linux即時(shí)通訊服務(wù)服務(wù)器 jabber, 有時(shí)候我們會(huì)把xmpp協(xié)議也叫jabber協(xié)議召耘,其實(shí)這是不規(guī)范的百炬,xmpp是個(gè)協(xié)議,而jabber是個(gè)服務(wù)器污它,因?yàn)閖abber開源剖踊,設(shè)計(jì)精良庶弃,安全,穩(wěn)定德澈,跨語言歇攻,跨平臺,封裝開發(fā)簡便梆造,越來越多人開始使用它缴守,并且逐步完善,不久它便形成了一個(gè)強(qiáng)大的標(biāo)準(zhǔn)化體系镇辉,Google GTalk屡穗、Pidgin、PSI忽肛、Spark村砂、Pandion、MSN屹逛、Yahoo础废、ICQ、QQ罕模、WhatsApp Wechat..諸如此類一些軟件在這個(gè)強(qiáng)大的標(biāo)準(zhǔn)體系下實(shí)現(xiàn)了互聯(lián)评腺。

那么XMPP到底是什么意思,用通俗的話講它和基于xml格式的一些協(xié)議原理差不多手销,只不過是個(gè)針對服務(wù)器的軟件協(xié)議罷了歇僧。

XMPP(可擴(kuò)展通訊和表示協(xié)議)是基于可擴(kuò)展標(biāo)記語言(XML)的協(xié)議,它用于即時(shí)消息(IM)以及在線探測锋拖。這個(gè)協(xié)議可能最終允許因特網(wǎng)用戶向因特網(wǎng)上的其他任何人發(fā)送即時(shí)消息诈悍。

XMPP(Extensible Messaging and Presence Protocol),簡單的來講兽埃,它就是一個(gè)發(fā)送接收處理消息的協(xié)議侥钳,但是這個(gè)協(xié)議發(fā)送的消息,既不是二進(jìn)制的東東也不是字符串柄错,而是XML舷夺。正是因?yàn)槭褂昧薠ML作為消息傳遞的中介,XMPP目前被IETF國際標(biāo)準(zhǔn)組織完成了標(biāo)準(zhǔn)化工作售貌。

其中Gtalk 就是基于XMPP 協(xié)議的一個(gè)實(shí)現(xiàn)给猾,其他的則不是。當(dāng)前IM幾乎作為每個(gè)上網(wǎng)者必然使用的工具颂跨,在國外的大型企業(yè)中有一些企業(yè)級的IM應(yīng)用敢伸,但是其商業(yè)價(jià)值還沒完全發(fā)揮出來。

設(shè)想既然XMPP協(xié)議是一個(gè)公開的協(xié)議恒削,那么每個(gè)企業(yè)都可以利用它來開發(fā)適合本身企業(yè)工作池颈,提高自身生產(chǎn)效率的IM尾序;甚至,你還可以在網(wǎng)絡(luò)游戲中集成這種通信軟件躯砰,不但讓你可以邊游戲邊聊天每币,也可以開發(fā)出適合游戲本身的IM應(yīng)用,比如說一些游戲關(guān)鍵場景提醒功能琢歇,團(tuán)隊(duì)語音交流等等都可以基于IM來實(shí)現(xiàn)兰怠。

基于XMPP的幾個(gè)案例

Openfire - Java XMPP服務(wù)器

Openfire是開源的實(shí)時(shí)協(xié)作服務(wù)器(RTC),它是基于公開協(xié)議XMPP(也成為Jabber)消息的。Openfire的核心功能可以概括為:連接管理矿微、消息解析痕慢、消息路由、消息發(fā)送

Openfire(服務(wù)器端)
Openfire是一個(gè)即時(shí)通訊服務(wù)器涌矢,也稱之為即時(shí)通訊平臺掖举。它是基于XMPP協(xié)議的,大家所熟悉的通訊軟件QQ娜庇、MSN和Gtalk等等塔次,其中Gtalk就是基于XMPP協(xié)議的實(shí)現(xiàn)。

下載地址:
http://www.igniterealtime.org/downloads/index.jsp

注意: 使用Openfire需要配置機(jī)器的域名名秀。如果局域網(wǎng)內(nèi)沒有安裝域服務(wù)器励负,則需要手工為機(jī)器配置域名,Windows平臺打開C:\WINDOWS\system32\drivers\etc\hosts文件匕得,增加一新行:127.0.0.1 www.rair.com (根據(jù)自己的需要可配置稱別的名字继榆,但最好符合帶.的域名格式)

Spark(客戶端) XMPP,自帶有Android組件的處理

Spark從本質(zhì)上來說就是一個(gè)運(yùn)行在PC上的java程序,你可以看成是官方為我們實(shí)現(xiàn)好的運(yùn)行在PC上的客戶端汁掠,我們只需要下載使用即可

下載地址:
http://www.igniterealtime.org/downloads/index.jsp

ASmack( jar )

一套封裝好了的用于實(shí)現(xiàn)XMPP協(xié)議傳輸?shù)腁PI略吨,它是一個(gè)非常簡單并且功能強(qiáng)大的類庫,給用戶發(fā)送消息只需要三行代碼

下載地址:
http://www.igniterealtime.org/downloads/index.jsp
http://code.google.com/p/asmack/downloads/list (需科學(xué)上網(wǎng))

常用API

XMPPConnection(xmpp連接核心類)
ConnectionConfiguration(連接配置類)
AccountManager(注冊用戶管理類)
XmppConnectionListener(連接監(jiān)聽類)
ChatManagerListener(聊天事監(jiān)聽事件)
MultiUserChat(多用戶聊天)
MessageListener(消息監(jiān)聽事件)

androidpn

(Android Push Notification)是一個(gè)基于XMPP協(xié)議的java開源Android push notification實(shí)現(xiàn)考阱。它包含了完整的客戶端和服務(wù)器端翠忠。

服務(wù)器端實(shí)現(xiàn)原理
connection收到packet,使用tsc.push.server.xmpp.codec解碼乞榨。router根據(jù)packet的namespace等信息秽之,將packet路由到相應(yīng)的handler,handler進(jìn)行處理PersistentConnectionListener吃既,PhoneStateChangeListener考榨,ReconnectionThread。java三個(gè)類則負(fù)責(zé)監(jiān)聽手機(jī)的狀態(tài)并進(jìn)行斷線重連

客服端實(shí)現(xiàn)原理
NotificationIQ,NotificationIQProvider,NotificationPacketListener三個(gè)類負(fù)責(zé)對收到的Notification格式的消息進(jìn)行解析和處理鹦倚。XmppManager是主控制器董虱,NotificationService通過這個(gè)類,在后臺維護(hù)androidpn連接。

開發(fā)者

作為我們開發(fā)者愤诱,我們主要還是用到第三方平臺。

推送:
極光推送(部分免費(fèi))
友盟推送(免費(fèi))
百度推聊(免費(fèi))
個(gè)推推送(部分免費(fèi)) - 新浪微博

即時(shí)通訊:
環(huán)信即時(shí)通訊
融云即時(shí)通訊
極光推送

第三方平臺的配置和使用參照官方文檔就妥妥的了捐友。
n(≧▽≦)n

由泰爾實(shí)驗(yàn)室牽頭的安卓統(tǒng)一推送研討會(huì)正在進(jìn)行中淫半,我們一起關(guān)注安卓推送生態(tài)的變化吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匣砖,一起剝皮案震驚了整個(gè)濱河市科吭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猴鲫,老刑警劉巖对人,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拂共,居然都是意外死亡牺弄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門宜狐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來势告,“玉大人,你說我怎么就攤上這事抚恒≡厶ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵俭驮,是天一觀的道長回溺。 經(jīng)常有香客問我,道長混萝,這世上最難降的妖魔是什么遗遵? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮譬圣,結(jié)果婚禮上瓮恭,老公的妹妹穿的比我還像新娘。我一直安慰自己厘熟,他們只是感情好屯蹦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绳姨,像睡著了一般登澜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上飘庄,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天脑蠕,我揣著相機(jī)與錄音,去河邊找鬼。 笑死谴仙,一個(gè)胖子當(dāng)著我的面吹牛迂求,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晃跺,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼揩局,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了掀虎?” 一聲冷哼從身側(cè)響起凌盯,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烹玉,沒想到半個(gè)月后驰怎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡二打,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年县忌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片址儒。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芹枷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出莲趣,到底是詐尸還是另有隱情鸳慈,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布喧伞,位于F島的核電站走芋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏潘鲫。R本人自食惡果不足惜翁逞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望溉仑。 院中可真熱鬧挖函,春花似錦、人聲如沸浊竟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽振定。三九已至必怜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間后频,已是汗流浹背梳庆。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工暖途, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人膏执。 一個(gè)月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓驻售,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胧后。 傳聞我的和親對象是個(gè)殘疾皇子芋浮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1.基于HTTP協(xié)議的推送機(jī)制 基于HTTP協(xié)議的推送機(jī)制是一種請求-響應(yīng)模式,由于HTTP協(xié)議是應(yīng)用層的單工通信...
    雅然風(fēng)懿閱讀 3,957評論 1 5
  • 互聯(lián)網(wǎng)推送服務(wù)原理:長連接+心跳機(jī)制(MQTT協(xié)議)Android推送技術(shù)研究Android實(shí)現(xiàn)推送方式解決方案a...
    合肥黑閱讀 2,995評論 0 12
  • 關(guān)于XMPP最權(quán)威的講解:http://www.jabbercn.org/RFC3920(這個(gè)才是最權(quán)威的,下面文...
    隨風(fēng)飄蕩的小逗逼閱讀 1,466評論 1 5
  • Android消息推送機(jī)制研究1.基于HTTP協(xié)議的推送機(jī)制基于HTTP協(xié)議的推送機(jī)制是一種請求-響應(yīng)模式,由于H...
    GB_speak閱讀 679評論 0 2
  • 這周總共寫了7篇文章 周一壳快,《如何做一個(gè)好父親》,如果我問你這個(gè)問題镇草,我不知道你的答案是什么眶痰?是提供孩子各種教育環(huán)...
    忠良162閱讀 353評論 2 4