Android 訊息推送 Xmpp協議

來源:互聯網
上載者:User

標籤:des   android   style   http   io   color   ar   os   使用   

1.引言

  所謂的訊息推送就是從伺服器端向移動終端發送串連,傳輸一定的資訊。比如一些新聞用戶端,每隔一段時間收到一條或者多條通知,這就是從伺服器端傳來的推送訊息;還比如常用的一些IM軟體如、GTalk等,都具有伺服器推送功能。

  推送方法如下:

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

  在Android平台上,你可以通過攔截SMS訊息並且解析訊息內容來瞭解伺服器的意圖,可以實現完全的即時操作。但是問題是這個方案的成本相對比較高,且依賴於電訊廠商。

  2)迴圈主動定時擷取

  這種方法需要用戶端來做一個定時或者周期性的訪問伺服器端介面,以獲得最新的訊息。輪詢的頻率太慢可能導致某些訊息的延遲,太快則會大量消耗網路頻寬和電池。

  3)持久串連

  這個方案可以解決由輪詢帶來的效能問題,但是還是會消耗手機的電池。我們需要開一個服務來保持和伺服器端的持久串連(蘋果就和Google的C2DM是這種機制)。但是對於Android系統,當系統可用資源較低,系統會強制關閉我們的服務或者是應用,這種情況下串連會強制中斷。(Apple的推送服務之所以工作的很好,是因為每一台手機僅僅保持一個與伺服器之間的串連,事實上C2DM也是這麼工作的。即所有的推送服務都是經由一個Proxy 伺服器完成的,這種情況下只需要和一台伺服器保持持久串連即可。C2DM=Cloud to Device Messaging)。

  相比之下第三種還是最可行的。為軟體編寫系統服務或開機啟動功能;或者如果系統資源較低,服務被關閉後可以在onDestroy ()方法裡面再重啟該服務,進而實現持久串連的方式。

  C2DM內建於Android的2.2系統上,無法相容老的1.6到2.1系統;且依賴於Google官方提供的C2DM伺服器,由於國內的網路環境,這個服務經常不可用。

  建立在TCP協議之上的XMPP協議,不僅可提供可這種持久串連的功能,能實現伺服器和客戶機的雙工通訊,還能不依賴與系統版本和google伺服器的限制,提供了比較好的解決方案。

2. XMPP協議

  XMPP全稱Extensible Messaging and Presence Protocol,前身是Jabber項目,是一種以XML為基礎的開放式即時通訊協議。XMPP因為被Google Talk和網易泡泡應用而被廣大網民所接觸。XMPP的關鍵特色是,分散式的即時通訊系統,以及使用XML串流。XMPP目前被IETF國際標準組織完成了標準化工作。

  Android push notification(androidpn) 是一個基於XMPP協議的java開源實現,它包含了完整的用戶端和伺服器端。該伺服器端基本是在另外一個開源工程openfire基礎上修改實現的。

  androidpn用戶端需要用到一個基於java的開源XMPP協議包asmack,這個包同樣也是基於openfire下的另外一個開源項目smack,不過我們不需要自己編譯,可以直接把androidpn用戶端裡面的asmack.jar拿來使用。用戶端利用asmack中提供的XMPPConnection類與伺服器建立持久串連,並通過該串連進行使用者註冊和登入認證,同樣也是通過這條串連,接收伺服器發送的通知。

  androidpn伺服器端也是java語言實現的,基於openfire開源工程,不過它的Web部分採用的是spring架構,這一點與openfire是不同的。Androidpn伺服器包含兩個部分,一個是偵聽在5222連接埠上的XMPP服務,負責與用戶端的XMPPConnection類進行通訊,作用是使用者註冊和身份認證,並發送推播通知訊息。另外一部分是Web伺服器,採用一個輕量級的HTTP伺服器,負責接收使用者的Web請求。伺服器的這兩方式,意義非凡:當相應的TCP連接埠被防火牆封閉,可以使用輪詢的方式進行訪問,因此又有助於通過防火牆。


3. XMPP協議實現Android推送 

      本文主要介紹AndroidPn項目實現推送的使用過程。


      在Android中實現資訊推送,其中一個比較成熟的解決方案便是使用XMPP協議實現。而AndroidPn項目就是使用XMPP協議實現資訊推送的一個開源項目。

Apndroid Push Notification的特點: 

快速整合:提供一種比C2DM更加快捷的使用方式,避免各種限制.  

無需架設伺服器:通過使用"雲端服務",減少額外伺服器負擔.

可以同時推送訊息到網站頁面,android 手機

耗電少,佔用流量少.

   

具體配置過程: 

首先, 我們需要下載androidpn-client-0.5.0.zip和androidpn-server-0.5.0-bin.zip。

:http://sourceforge.net/projects/androidpn/     (如果開啟不了上面的網址,那就需要翻牆了,你懂得)。

     

解壓兩個包,Eclipse匯入client,配置好目標平台,開啟raw/androidpn.properties檔案,配置用戶端程式。

 

1. 如果是模擬器來運行用戶端程式,把xmppHost配置成10.0.2.2[模擬器把10.0.2.2認為是所在主機的地址,127.0.0.1是模擬器   本身的迴環地址,10.0.2.1表示網關地址,10.0.2.3表示DNS地址,10.0.2.15表示目標裝置的網路地址],關於模擬器的詳細資料,大家可參閱相關資料,這裡不再詳述.

xmppPort=5222 是伺服器的xmpp服務監聽連接埠運行androidpn-server-0.5.0\bin\run.bat啟動伺服器,從瀏覽器訪問http://127.0.0.1:7070/index.do (androidPN Server有個輕量級的web伺服器,在7070連接埠監聽請求,接受使用者輸入的簡訊)

  運行用戶端,用戶端會向伺服器發起串連請求,註冊成功後,伺服器能識別用戶端,並維護和用戶端的IP長串連。


2. 如果是在同一個區域網路內的其他機器的模擬器測試(或者使用同一無線路由器wifi上網的真機) ,則需要把這個值設定為伺服器機器的區域網路ip.  

例如 你的電腦和android手機 都通過同一個無線路由器wifi上網, 電腦的ip地址為 192.168.1.2 而 手機的ip地址為 192.168.1.3, 這個時候 需要把這個值修改為 xmppHost=192.168.1.1 或是電腦的IP地址,就可以在手機上使用了.

      3. 如果是不在同一個區域網路的真機測試,我們需要將這個值設定為伺服器的IP地址。 

       具體配置如所示:

       

        

       

我的電腦IP是:192.168.8.107 

伺服器運行主介面:

    推送訊息:

   

     測試結果如: 

     

 

    


     模擬器和真機測試通過。

Android 訊息推送 Xmpp協議

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.