若是百度或者Google搜索 「android 推送」 關鍵字,至關一部分文章都在說到 androidpn。也能夠看到有人說用起來了,有人在吐槽說不穩定、功能缺失,維護工做量大。本文嘗試對 androidpn 的前世此生作個彙總分析。android
訪問 androidpn官方網站,咱們能夠了解到以下的基本信息:程序員
以上的基本信息代表,這不是一個很成熟的項目(貌似我的維護的),可是確有大量的中國人有興趣。服務器
相信有很多同窗知道爲何國人對 androidpn 這麼感興趣,這是國情啊:由於Google官方的 GCM(以前叫C2DM)在國內使用不了。另外,國內以前又沒有可用好用的第三方推送服務。因此,你們不得已而爲之:本身搞。從頭開始?工做量太大,太不划算了。因此從開源的開始。而也剛好,開源項目裏,明確地爲 Android Push來生的,也就 androidpn了。mqtt 裏沒有整合這麼好能夠快速跑起來的。框架
但 androidpn 搭建起來後,狀況如何呢?CSDN上一個美女程序員的文章 androidpn推送初探 比較熱。這篇文章裏做者提出來幾個問題:jsp
做者贊在於,不僅是知足於把環境搭建起來,並且針對業務需求作了思考。解析下她提出的問題:工具
第一個問題相對簡單,要去定製下用戶體系,業務部分的用戶體系須要與 androidpn 對應起來。網站
第二個問題,是個小細節,androidpn 客戶端沒有去作這些細節。.net
第三個問題,是最重要的。androidpn 背後的 Openfire,是 XMPP IM服務器,消息內容是不會落地的,即只在內存裏保存一下離線消息。若是要生產用,須要考慮改造這裏。blog
如下從 androidpn 的技術基礎來個深刻的剖析。內存
androidpn 是一個整合方案,它是基於 XMPP 開源組件的 。即服務器端基於 Openfire,客戶端基於 Smack ,這二個是 XMPP 開源組件裏最多見的兩個。androidpn使用Spring框架作了個Web層,把XMPP IM組件集成起來,以實現Android Push功能。所以,androidpn的可用性來自於以下幾個方面:
第一個方面,XMPP協議與開源組件。XMPP是個成熟的IM(即時通信)協議,基於XML文本方式實現,靈活強大。國外大多數聊天服務都是基於XMPP的,好比:Gtalk,Facebook Chat,iMessage等。正由於如此,因此XMPP的一些開源組件可用性還不錯,國內不少新興的聊天工具剛開始徹底基於XMPP開源組件來開發,好比米聊。
可是,以筆者曾經實現過移動聊天App的相似經從來說,XMPP開源組件有其問題,須要大範圍改造:
基於這些緣由,並考慮到大範圍改造技術上更不可控,因此筆者所在的團隊剛開始用XMPP開源方案,後來徹底切到本身實現的技術方案上了。
第二個方面,Android Push的需求場景,除了消息可以及時地推送到客戶端,還有什麼其餘的基本需求呢?這裏試舉兩個例子:其一,確保消息可以到達。便是否能有機制確保消息不會丟失,無論什麼緣由。其二,向指定的一羣人推送消息。anroidpn的基礎XMPP IM組件是沒有考慮這些的,須要作大量的定製改造。
總結起來,使用androidpn能夠簡單地作到:把消息推送到客戶端。可是,要使其適合開發者須要,並在生產環境上運行,則可能須要作不少定製開發工做。從筆者與多個開發者交流獲得的反饋來看,在生產環境裏運行起來問題不少。
上面說到,國內以前沒有什麼可用好用的第三方消息推送服務,因此你們不得不本身去考慮搭建。最近國內有個第三方消息推送服務開放了,它是極光推送,普通開發者能夠隨時註冊賬號、下載SDK作集成,整個過程 3 分鐘就能夠完成。關鍵在於,這個服務是免費的。