androidpn 做爲Android推送方案存在的問題

若是百度或者Google搜索 「android 推送」 關鍵字,至關一部分文章都在說到 androidpn。也能夠看到有人說用起來了,有人在吐槽說不穩定、功能缺失,維護工做量大。本文嘗試對 androidpn 的前世此生作個彙總分析。android

訪問 androidpn官方網站,咱們能夠了解到以下的基本信息:程序員

  1. androidpn 全稱是 Android Push Notification。
  2. 這是韓國人開源放在 sourceforge.net 上的一個開源項目,文檔是韓文的。
  3. 最近的版本更新時間是 2010-11-05,也就是約二年以前。
  4. 來自中國的訪問量,佔其總訪問量的 81%。請點擊本連接再看當前的統計

以上的基本信息代表,這不是一個很成熟的項目(貌似我的維護的),可是確有大量的中國人有興趣。服務器

相信有很多同窗知道爲何國人對 androidpn 這麼感興趣,這是國情啊:由於Google官方的 GCM(以前叫C2DM)在國內使用不了。另外,國內以前又沒有可用好用的第三方推送服務。因此,你們不得已而爲之:本身搞。從頭開始?工做量太大,太不划算了。因此從開源的開始。而也剛好,開源項目裏,明確地爲 Android Push來生的,也就 androidpn了。mqtt 裏沒有整合這麼好能夠快速跑起來的。框架

但 androidpn 搭建起來後,狀況如何呢?CSDN上一個美女程序員的文章 androidpn推送初探 比較熱。這篇文章裏做者提出來幾個問題:jsp

  • androidpn服務器收到消息後如何知道要發給哪一個用戶?
  • 一旦服務器重啓了,客戶端彷佛不會自動重連,須要用戶本身中斷後臺Service再重啓應用。
  • androidpn服務器不保存消息。就是說它一有消息就會發出去,即便客戶端根本不在線,它也不會重發。

做者贊在於,不僅是知足於把環境搭建起來,並且針對業務需求作了思考。解析下她提出的問題:工具

第一個問題相對簡單,要去定製下用戶體系,業務部分的用戶體系須要與 androidpn 對應起來。網站

第二個問題,是個小細節,androidpn 客戶端沒有去作這些細節。.net

第三個問題,是最重要的。androidpn 背後的 Openfire,是 XMPP IM服務器,消息內容是不會落地的,即只在內存裏保存一下離線消息。若是要生產用,須要考慮改造這裏。blog

如下從 androidpn 的技術基礎來個深刻的剖析。內存

androidpn 是一個整合方案,它是基於 XMPP 開源組件的 。即服務器端基於 Openfire,客戶端基於 Smack ,這二個是 XMPP 開源組件裏最多見的兩個。androidpn使用Spring框架作了個Web層,把XMPP IM組件集成起來,以實現Android Push功能。所以,androidpn的可用性來自於以下幾個方面:

  1. 其依賴的XMPP IM協議與通信機制,是否適合用於Android Push場景。
  2. 其是否爲Android Push需求作了必要的定製。

第一個方面,XMPP協議與開源組件。XMPP是個成熟的IM(即時通信)協議,基於XML文本方式實現,靈活強大。國外大多數聊天服務都是基於XMPP的,好比:Gtalk,Facebook Chat,iMessage等。正由於如此,因此XMPP的一些開源組件可用性還不錯,國內不少新興的聊天工具剛開始徹底基於XMPP開源組件來開發,好比米聊。

可是,以筆者曾經實現過移動聊天App的相似經從來說,XMPP開源組件有其問題,須要大範圍改造:

  1. XMPP協議複雜冗餘,客戶端費流量、費電;
  2. 開源的XMPP服務器(androidpn選擇的是Openfire)單點容量有限,集羣方案複雜、不成熟。

基於這些緣由,並考慮到大範圍改造技術上更不可控,因此筆者所在的團隊剛開始用XMPP開源方案,後來徹底切到本身實現的技術方案上了。

第二個方面,Android Push的需求場景,除了消息可以及時地推送到客戶端,還有什麼其餘的基本需求呢?這裏試舉兩個例子:其一,確保消息可以到達。便是否能有機制確保消息不會丟失,無論什麼緣由。其二,向指定的一羣人推送消息。anroidpn的基礎XMPP IM組件是沒有考慮這些的,須要作大量的定製改造。

總結起來,使用androidpn能夠簡單地作到:把消息推送到客戶端。可是,要使其適合開發者須要,並在生產環境上運行,則可能須要作不少定製開發工做。從筆者與多個開發者交流獲得的反饋來看,在生產環境裏運行起來問題不少。

上面說到,國內以前沒有什麼可用好用的第三方消息推送服務,因此你們不得不本身去考慮搭建。最近國內有個第三方消息推送服務開放了,它是極光推送,普通開發者能夠隨時註冊賬號、下載SDK作集成,整個過程 3 分鐘就能夠完成。關鍵在於,這個服務是免費的。

相關文章
相關標籤/搜索