【新知提升】Android中的訊息推送

來源:互聯網
上載者:User

  前段時間做了一個應用,需要用到伺服器端向Android或者是Iphone終端主動發送命令。隨後用戶端做出相應的反應。當時沒有找到最佳的方案,一直擱置著。今天看到網上有關於Android推送的介紹,先學習一下,以便以後用到了不至於不知道。

什麼是推送呢?  

  所謂的訊息推送就是從伺服器端向移動終端發送串連,傳輸一定的資訊。舉個例子,大家有用過百度新聞用戶端的應該知道,我們會每隔一段時間收到一條或者多條通知,這就是從百度新聞伺服器端傳來的推送訊息。

Google Android中內建的推送架構

  說道訊息推送,不得不提起google的android系統中內建的推送架構,就是C2DM。全稱就是Cloud to Device Messaging。從字面可以看出來就是向終端發送訊息用的。但是這種機制在Android2.2以及以後的Android版本系統中才有,而且必須依賴Google伺服器。由於這兩個致命的約束,很少中國人會使用C2DM。但是其原理還是值得研究的。

訊息推送的替代方案

  既然Google這麼不靠譜,那麼要想實現訊息的推送就得我們自己想辦法尋找替代方案了。參考網上資料找到了以下方案

  1). 通過SMS進行伺服器端和用戶端的交流通訊。

  這種方法依賴於電訊廠商,資費明顯成本過高,不到萬不得已絕不用這種方案。

  2). 迴圈主動定時擷取

  這種方法需要用戶端來做一個定時或者周期性的訪問伺服器端介面,以獲得最新的訊息。顯然這種方法有兩個弊端,一個是用戶端對電池的消耗顯而易見,另一個是訊息的擷取不夠及時,如果是地震訊息(大家笑了吧)。

  3).長串連方式

  這種方案和Google的C2DM的方案是一樣的,同時大名鼎鼎的蘋果用的也是這樣的機制。這種機制的弊端也是顯而易見的:我們需要開一個服務來保持和伺服器端的持久串連。But ANdroid系統的特點我也不說了。當系統可用資源較低,系統會強制關閉我們的服務或者是應用,這樣的話我們的串連中斷就悲劇了。

最佳方案

  雖然三條方案都有弊端,相比之下第三種還是最可行的,But我們必須做點最佳化。那麼下面我們就來談談兩種牛X的協議--MQTT&XMPP。

  MQTT不說了,可以上網搜搜。看到XMPP立刻想到了XML對吧。其實XMPP中文叫可擴充通訊和表示協議。百度百科是這樣介紹的

  【MPP是一種基於XML的協議,它繼承了在XML環境中靈活的發展性。因此,基於XMPP的應用具有超強的可擴充性。經過擴充以後的XMPP可以通過發送擴充的資訊來處理使用者的需求,以及在XMPP的頂端建立如內容發布系統和基於地址的服務等應用程 序。而且,XMPP包含了針對伺服器端的軟體協議,使之能與另一個進行通話,這使得開發人員更容易建立客戶應用程式或給一個配好系統添加功能。】

  補充: XMPP傳輸的是與即時通訊相關的指令。在以前這些命令要麼用2進位的形式發送(比如QQ),要麼用純文字指令加空格加參數加換行苻的方式發送(比如MSN)。而XMPP傳輸的即時通訊指令的邏輯與以往相仿,只是協議的形式變成了XML格式的純文字。這不但使得解析容易了,人也容易閱讀了,方便了開發和查錯。而XMPP的核心部分就是一個在網路上分區斷髮送XML的流協議。這個流協議是XMPP的即時通訊指令的傳遞基礎,也是一個非常重要的可以被進一步利用的網路基礎協議。所以可以說,XMPP用TCP傳的是XML流。

基於XMPP的開源架構

  說到這裡估計大家都想問,有沒有現成的可用的基於XMPP的開源架構。答案是有的,而且很簡單,很容易上手使用--AndroidPN

  源碼中這樣介紹的

  This is an open source project to provide push notification support for Android -- a xmpp based notification server and a client tool kit.

  那麼我們就來看看怎麼吧這個環境搭建起來吧

  首先我們需要下載用戶端和伺服器端代碼

  我們說過這是一個開源的架構,地址在http://sourceforge.net/projects/androidpn/ 

  將伺服器端代碼解壓,在bin目錄下的run.bat開啟就行了我們就可以看到啟動了Tomcat容器,這樣我們的伺服器端就搭建好了,簡單吧。

  將用戶端代碼解壓,你會發現是一個android工程檔案。那麼直接匯入Eclipse,開啟raw下的設定檔androidpn

  將androidpn.properties,修改如下

  apiKey=1234567890

  xmppHost=10.0.2.2

  xmppPort=5222

  如果你是模擬器就設定如上,若是手機就改一下xmppHost為具體的伺服器位址IP。

推送訊息到用戶端

  當用戶端跑起來我們的Client端程式後,我們可以開啟伺服器端

點擊Notifacations標籤,就可以發通知給指定用戶端或者所有用戶端了

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.