自己解決基于MQTT的android推送

突然想探索一下MQTT的推送~
都是現(xiàn)成的架子,搭起來(lái)很容易!

1.先配置服務(wù)端,測(cè)試的時(shí)候可以在本地先測(cè)試

這里選擇apache的開(kāi)源項(xiàng)目
http://activemq.apache.org/activemq-5140-release.html

這里我用的系統(tǒng)是ubuntu14.0.4選擇的是Linux版本,下載壓縮包.
解壓到自己的軟件目錄.

ss@Dell:~/Soft/apache-activemq-5.14.0$ ls
activemq-all-5.14.0.jar  bin  conf  data  docs  examples  lib  LICENSE  NOTICE  README.txt  tmp  webapps  webapps-demo

啟動(dòng)服務(wù)器

ss@Dell:~/Soft/apache-activemq-5.14.0/bin$ ls
activemq  activemq-diag  activemq.jar  env  linux-x86-32  linux-x86-64  macosx  wrapper.jar
ss@Dell:~/Soft/apache-activemq-5.14.0/bin$ ./activemq start

詳細(xì)的內(nèi)容可以看官網(wǎng)
http://activemq.apache.org/getting-started.html
也要讀一下docs/下的內(nèi)容!


這個(gè)時(shí)候,可以登錄后臺(tái)了,瀏覽器中輸入

http://localhost:8161/admin

登錄時(shí),會(huì)提示賬戶(hù)名和密碼
默認(rèn)賬戶(hù)admin,密碼admin
當(dāng)然這個(gè)可以改的, 配置 conf/jetty-real.properties這個(gè)文件.

控制臺(tái)

此時(shí)服務(wù)端算是配好了,對(duì)了,還要看下MQTT的監(jiān)聽(tīng)端口,這個(gè)ActiveMQ是很強(qiáng)大的,它不僅僅是支持MQTT協(xié)議,還有其它協(xié)議!
打開(kāi)conf/activemq.xml這個(gè)配置文件


這里可以看MQTT的監(jiān)聽(tīng)端口是1883,如果自己的防火墻打開(kāi)了,那么用速sudo ufw allow 1883,這個(gè)端口允許訪問(wèn)!
用命令netstat -lt可以查看所有監(jiān)聽(tīng)的TCP協(xié)議端口!

...
tcp6       0      0 [::]:1883               [::]:*                  LISTEN 
...

2.配置客戶(hù)端

先下載一個(gè)現(xiàn)成的demo
https://github.com/tokudu/AndroidPushNotificationsDemo
這是很老的一個(gè)Eclipse項(xiàng)目,但是不妨礙測(cè)試,下下來(lái),我直接把相關(guān)文件拷貝到了androidstudio下面,習(xí)慣了as
1.修改清單文件中的報(bào)錯(cuò),增加訪問(wèn)外部sd卡的權(quán)限
2.修改推送服務(wù)PushService的

private static final String MQTT_HOST = "10.42.0.1";
private static int MQTT_BROKER_PORT_NUM = 1883;

上面是我的服務(wù)端ip,和端口~
3.通知,原項(xiàng)目用的過(guò)時(shí)的包,有一個(gè)方法,現(xiàn)在沒(méi)有了,那我就改成v7下的兼容api

    private void showNotification(String text) {
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setContentTitle(NOTIF_TITLE);
        builder.setContentText(text);
        builder.setAutoCancel(true);
        builder.setSmallIcon(com.tokudu.demo.R.drawable.icon);
        builder.setWhen(System.currentTimeMillis());
//      Notification n = new Notification();
//      n.flags |= Notification.FLAG_SHOW_LIGHTS;
//      n.flags |= Notification.FLAG_AUTO_CANCEL;
//      n.defaults = Notification.DEFAULT_ALL;
//      n.icon = com.tokudu.demo.R.drawable.icon;
//      n.when = System.currentTimeMillis();
//      // Simply open the parent activity
        PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this,
                PushActivity.class), 0);

//      // Change the name of the notification here
//      n.setLatestEventInfo(this, NOTIF_TITLE, text, pi);
        builder.setContentIntent(pi);
        builder.setDefaults(NotificationCompat.DEFAULT_ALL);
        Notification n = builder.build();
        mNotifMan.notify(NOTIF_CONNECTED++, n);
    }

在這里啟動(dòng),停止推送,都是交給了服務(wù),在onStart()中判斷action內(nèi)容~
連接tcp://10.42.0.1@1883

// Create connection spec
String mqttConnSpec = "tcp://" + brokerHostName + "@" + MQTT_BROKER_PORT_NUM;
// Create the client and connect
mqttClient = MqttClient.createMqttClient(mqttConnSpec, MQTT_PERSISTENCE);
String clientID = MQTT_CLIENT_ID + "/"+ mPrefs.getString(PREF_DEVICE_ID, "");
mqttClient.connect(clientID, MQTT_CLEAN_START, MQTT_KEEP_ALIVE);

訂閱自己的專(zhuān)題

String[] topics = { topicName };
mqttClient.subscribe(topics, MQTT_QUALITIES_OF_SERVICE);

可以訂閱多個(gè)專(zhuān)題!

好啦,如果沒(méi)有異常,打印了"Connection established to 10.42.0.1 on topic tokudu/yzq124 ", 就連接成功了...

好,上后臺(tái)看下真正連上來(lái)沒(méi)有!

最后面的 tokudu.yzq124 即是 客戶(hù)端訂閱的專(zhuān)題,那么來(lái)一發(fā)吧!


自定義自己的內(nèi)容,Send!

此時(shí),客戶(hù)端會(huì)收到從broker推送過(guò)來(lái)的消息

        /*
         * Called when we receive a message from the message broker.
         */
        public void publishArrived(String topicName, byte[] payload, int qos,
                boolean retained) {
            // Show a notification
            String s = new String(payload);
            showNotification(s);
            log("Got message: " + s);
        }

MQTT強(qiáng)大的是群推模式
客戶(hù)端可以注冊(cè)多個(gè)token(客戶(hù)端的唯一標(biāo)識(shí))可以讓所有客戶(hù)端都注冊(cè)該token即可啡彬,然后發(fā)送的時(shí)候糟港,只需要針對(duì)一個(gè)token發(fā)消息,那么所有的手機(jī)都收到了脚祟。不用像其他的推送一樣饲鄙,對(duì)每個(gè)token都去發(fā)一遍凄诞。所以MQTT群發(fā)的效率的極高的。這樣的話對(duì)手機(jī)端來(lái)說(shuō)就很好了忍级,也許我們需要對(duì)某個(gè)程序的所有手機(jī)發(fā)帆谍、向某個(gè)程序某個(gè)版本手機(jī)發(fā),向某臺(tái)手機(jī)發(fā)推送 等等用MQTT都可以很輕松的實(shí)現(xiàn)轴咱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末既忆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嗦玖,更是在濱河造成了極大的恐慌患雇,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宇挫,死亡現(xiàn)場(chǎng)離奇詭異苛吱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)器瘪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)翠储,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人橡疼,你說(shuō)我怎么就攤上這事援所。” “怎么了欣除?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵住拭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我历帚,道長(zhǎng)滔岳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任挽牢,我火速辦了婚禮谱煤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘禽拔。我一直安慰自己刘离,他們只是感情好室叉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著硫惕,像睡著了一般太惠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疲憋,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天凿渊,我揣著相機(jī)與錄音,去河邊找鬼缚柳。 笑死埃脏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秋忙。 我是一名探鬼主播彩掐,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼灰追!你這毒婦竟也來(lái)了堵幽?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弹澎,失蹤者是張志新(化名)和其女友劉穎朴下,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體苦蒿,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡殴胧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了佩迟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片团滥。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖报强,靈堂內(nèi)的尸體忽然破棺而出灸姊,到底是詐尸還是另有隱情,我是刑警寧澤秉溉,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布力惯,位于F島的核電站,受9級(jí)特大地震影響坚嗜,放射性物質(zhì)發(fā)生泄漏夯膀。R本人自食惡果不足惜诗充,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一苍蔬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝴蜓,春花似錦碟绑、人聲如沸俺猿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)押袍。三九已至,卻和暖如春凯肋,著一層夾襖步出監(jiān)牢的瞬間谊惭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工侮东, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留圈盔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓悄雅,卻偏偏與公主長(zhǎng)得像驱敲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宽闲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容