1)輪詢(Pull)方式:客戶端定時向服務器發送詢問消息,壹旦服務器有變化則立即同步消息。
2)SMS(Push)方式:通過攔截SMS消息並且解析消息內容來了解服務器的命令,但這種方式壹般用戶在經濟上很難承受。
3)持久連接(Push)方式:客戶端和服務器之間建立長久連接,這樣就可以實現消息的及時行和實時性。
3、消息推送解決方案概述
A、C2DM雲端推送方案
在Android手機平臺上,Google提供了C2DM(Cloudto Device Messaging)服務。Android
Cloud to Device Messaging (C2DM)是壹個用來幫助開發者從服務器向Android應用程序發送數據的服務。該服務提供了壹個簡單的、輕量級的機制,允許服務器可以通知移動應用程序直接與服務器進行通信,以便於從服務器獲取應用程序更新和用戶數據。
該方案存在的主要問題是C2DM需要依賴於Google官方提供的C2DM服務器,由於國內的網絡環境,這個服務經常不可用。
B、MQTT協議實現Android推送
采用MQTT協議實現Android推送功能也是壹種解決方案。MQTT是壹個輕量級的消息發布/訂閱協議,它是實現基於手機客戶端的消息推送服務器的理想解決方案。
wmqtt.jar
是IBM提供的MQTT協議的實現。我們可以從這裏(/tokudu/AndroidPushNotificationsDemo)下載該項目的實例代碼,並且可以找到壹個采用PHP書寫的服務器端實現(/tokudu/PhpMQTTClient)。
C、RSMB實現推送功能
Really Small Message Broker (RSMB)
,是壹個簡單的MQTT代理,同樣由IBM提供,其查看地址是:/tech/rsmb。缺省打開1883端口,應用程序當中,它負責接收來自服務器的消息並將其轉發給指定的移動設備。SAM是壹個針對MQTT寫的PHP庫。我們可以從這個/package/sam/download/0.2.0地址下載它.
D、XMPP協議實現Android推送
Google官方的C2DM服務器底層也是采用XMPP協議進行的封裝。XMPP(可擴展通訊和表示協議)是基於可擴展標記語言(XML)的協議,它用於即時消息(IM)以及在線探測。這個協議可能最終允許因特網用戶向因特網上的其他任何人發送即時消息。
androidpn是壹個基於XMPP協議的java開源Android push notification實現。它包含了完整的客戶端和服務器端。但也存在壹些不足之處:
1)
比如時間過長時,就再也收不到推送的信息了。
2)性能上也不夠穩定。
3)如果將消息從服務器上推送出去,就不再管理了,不管消息是否成功到達客戶端手機上。
如果我們要使用androidpn,則還需要做大量的工作,需要理解XMPP協議、理解Androidpn的實現機制,需要調試內部存在的BUG。