Android 推送原理
由於最近項目中涉及到了Android推送,所以看了一些關於android推送方面的東西,總結到後面我們知道android推送的實現可以歸結為3種:
1、POLL,拉。大致思路為向伺服器定時的發送請求,然後自己讓伺服器返回資訊。
優點:實現簡單。
缺點:即時性差。如果定時間隔小串連數又多,對伺服器會有高壓力要求。據說還會費電……不知道是不是真的。
2、SMS,多媒體訊息方式。據說是攔截多媒體訊息,並解析內容。這個還沒有動手實踐過。
優點:實現簡單。即時性也好。
缺點:SMS服務的成本問題。貴!
3、TCP/IP,持久的長串連。簡單的說就是與伺服器建立一個基於TCP/IP持久串連,然後伺服器就可以給你發訊息了。
優點:即時性好。
缺點:實現起來比較困難。據說也會比較費電……也沒測試過。
POLL的比較簡單,用Timer和TimerTask定時器,以及HTTP相關的幾個類就可以實現基本的功能,然後自己解析伺服器返回資訊。
主要是關於持久長串連的實現:1、基於IBM的MQTT實現。 2、基於XMPP實現
基於XMPP實現的有一個Androidpn項目,開源的。雖然後面項目中我採用了MQTT。因為Androidpn不夠成熟,裡面有一些bug,我暫時無法修掉。因為我只看了Android端的原始碼,也許有些bug需要根據服務端修改。(困擾我很久的問題是伺服器重啟後androidpn手機端無法重連,暫時放下了,等有需要再去啃它)
其項目源碼在這裡可以下:http://sourceforge.net/projects/androidpn/ 進去之後的Files標籤裡有3個資源:
androidpn-server 伺服器端代碼
androidpn-demoapp 執行個體(說實話,沒什麼用)
androidpn-client 手機端代碼
補充:我記得再匯入項目後可能會出現:unable to resolve target ‘google inc. : Google APIs :7'這樣的錯誤提示。
解決方案: 項目右鍵,Properties,Resource,Text file encoding,other,選擇UTF-8
Android,Project Build Target,選擇Android1.5
感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!