天天看點

Android基于MQTT協定實作的推送功能

基于MQTT協定的實作有三種方式:

1.官方的C2DM,但是隻支援android2.2及以上平台的,而且使用的google的伺服器。

對于google伺服器的問題,網友應該都清楚,天朝的大中華區區域網路總是讓它不時的給你斷一下。

2.第三方的androidpn,和C2DM一樣,都是基于XMPP擴充的,是一個開源的項目,據說不錯。

http://sourceforge.net/projects/androidpn/

但是是基于長連接配接的,如果用戶端數量大,特别像手機這種都是長期線上的裝置,

會有兩個問題,(1)伺服器壓力,(2)手機的電池不夠用啊,電量卡卡卡的被你耗光了(需要優化網絡機制)。

3.使用IBM 的MQTT協定實作push消息

位址:http://tokudu.com/2010/how-to-implement-push-notifications-for-android/

這是一個非常理想的解決方案,是基于tcp協定的,低帶寬通信,而且國外友人已經測試,耗電量很多。

參考位址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1210/2141.html

前段時間公司需要Android端的手機群推功能,我們就通過MQTT來實作了該功能。

MQTT的官網如下 http://mqtt.org/

關于系統的主要架構就不詳述了。這關系的到職業道德問題,在這裡隻談談MQTT實作推送的功能。

在MQTT官網中http://mqtt.org/software列舉出了實作了該協定的開源用戶端和伺服器工程和庫。

我們是通過ApacheActiveClient開源項目的基礎上來實作的。

下面介紹用戶端和伺服器簡單的搭建:

用戶端 :

首先到github(https://github.com/tokudu/AndroidPushNotificationsDemo)網站上去下載下傳手機用戶端程式:AndroidPushNotificationsDemo.

運作結果如下圖所示 : 

Android基于MQTT協定實作的推送功能

其中Test_android1是對手機的唯一辨別,這個生成政策是可以自己來定的。很多時候我們需要話更多的時間去研究它的源碼,而不是去問别人,隻有當自己實在找不到解決方案的時候再問,我覺得這樣更利于我們對項目的了解和繼續擴充。

伺服器端

至于伺服器程式可以到http://activemq.apache.org/去下載下傳。需要注意的是,請讀者仔細閱讀該開源項目的文檔。

該項目非常強大,支援配置伺服器的主從,分布式等。

當你搭建成功伺服器後可以使用用戶端連接配接了。點選Start Push service按鈕啟動推送功能。

連接配接成功後你會在控制台看到如下界面:

Android基于MQTT協定實作的推送功能

在伺服器背景你将看到:

Android基于MQTT協定實作的推送功能

畫的紅線部分就是你的手機裝置,然後單擊進入如下界面:

Android基于MQTT協定實作的推送功能

最後單擊确定 ,在手機通知欄将會收到消息 :

Android基于MQTT協定實作的推送功能

至此,這就是簡單的伺服器想用戶端推送的消息了。

當然這是最最簡單的實作了。接下來就要看自己公司實際的需要進行擴充伺服器或者用戶端了。

其實MQTT最顯著的功能,就是群推。用戶端可以注冊多個token(用戶端的唯一辨別)可以讓所有用戶端都注冊該token即可,然後發送的時候,隻需要針對一個token發消息,那麼所有的手機都收到了。不用像其他的推送一樣,對每個token都去發一遍。是以MQTT群發的效率的極高的。這樣的話對手機端來說就很好了,也許我們需要對某個程式的所有手機發、向某個程式某個版本手機發,向某台手機發推送 等等用MQTT都可以很輕松的實作。

接下來就是要靠自己去研究MQTT了。其他官網文檔,和一些開源的功能已經提供了很多我們學習的資料。

下面是關于XMPP協定推送 :Android消息推送(一)--AndroidPn(XMPP協定)Demo版到正式上線

如果github上面的Android用戶端的程式不能運作,可以下載下傳我們用的(也是github上下載下傳的):

http://download.csdn.net/detail/johnny901114/5820151 如果還有問題可以留言。

轉載出處 : http://blog.csdn.net/johnny901114/article/details/8898727