Android froyo 之後,引入了 C2DM,基於XMPP 協議實現的推送機制。C2DM 的優點無需多言,但缺點也是顯而易見:
1. 需要google帳號。這一點約束太大了,很多手機廠家把google Apps給閹割了。
2. 國內服務不穩定,原因你懂得的。如果有能力在國外有伺服器,可以很快的發送訊息到C2DM 伺服器,從國內post 資料到 Google server,幾乎沒響應。
3. C2DM 僅支援 Android 2.2 以上
C2DM 運行在系統層級上,系統記憶體少時不容易被kill。C2DM與Gmail、Gtalk等共用同一個串連,減少耗電。跟iOS不一樣,Android支援App常駐進程,所以大家都不願意用。現在一些惡意的Android軟體,安裝後後台開啟一個服務,定時向使用者PUSH垃圾廣告,很邪惡。國內互連網公司都瞎折騰這樣那樣雲,但就沒有一家願意開發和提供一個Google C2DM的牆內替代品。
目前基於長串連push的開源軟體有:
AndroidPN
AndroidPN 是一個基於XMPP協議的java開源Android push Notification 實現,包含server與client,server 使用SSH架構,預設後台使用jetty,資料庫是hsqldb,該伺服器端基本上是在openfire基礎上修改實現的,據說在Android上的推送實現也是基於openfire,具體未詳。官方上的版本已經很久沒更新,而且還有一些bugs,比如:
1. 當伺服器端重啟的時候,用戶端就無法在串連到伺服器.
2. 不支援離線訊息。
3. 推送多條訊息重複問題
可以改造成tomcat版本,已經有很多網友在做這樣的事。
MQTT
IBM 產品,使用php寫的,據說外國網友在論壇上爆料,Facebook Android用戶端的推送使用這個。
沒有條件自己搞 push 伺服器的,可以使用第三方服務
Urban Airship http://urbanairship.com/
http://www.push-notification.org/
http://www.android-push.com/
據瞭解,錢方支付的 Android 用戶端是使用 http://www.android-push.com/ 的服務。