`
kavy
  • 浏览: 888649 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

采用MQTT协议实现Android消息推送

 
阅读更多

转自:http://www.cnblogs.com/glony/articles/2308165.html

 

对于消息推送,一开始还真不知道什么方式比较好,一头雾水,现在回顾总结下资料。

http://zheye.org/asks/4d99a1aafd503c41d700000a
通过上面者也里面的回复,得到一些信息。
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协议的,低带宽通信,而且国外友人已经测试,耗电量很多哦~

都是E文的,不习惯看E文的,也没关系,有一前辈给整理了一个中文的:
《Android推送通知指南》http://blog.csdn.net/joshua_yu/article/details/6563587
看了上面这些文章的内容,完成上面的例子,
然后看看源码,应该明白一些了。

========================================
MQTT是一项消息传递技术,由IBM再2001年发布。

总结一下,机制就是使用一个代理服务器message broker,
客户端client连接上这个服务器,然后告诉服务器说,我可以接收哪些类型的消息,
同时,client也可以发布自己的消息,这些消息根据协议的内容,可以被其他client获取。

只要手机客户端,连上服务器,然后就可以接收和发布消息了,不用自己写socket什么了,

低带宽,低耗电量,代码量也少,很简单吧。

 

package com.pig.test.mqtt;

import com.ibm.mqtt.MqttClient;
import com.ibm.mqtt.MqttException;
import com.ibm.mqtt.MqttSimpleCallback;

public class SubscribeClient {
 private final static String CONNECTION_STRING = "tcp://192.168.1.60:1883";
 private final static boolean CLEAN_START = true;
 private final static short KEEP_ALIVE = 30;//低耗网络,但是又需要及时获取数据,心跳30s
 private final static String CLIENT_ID = "client1";
 private final static String[] TOPICS = {
  "Test/TestTopics/Topic1",
  "Test/TestTopics/Topic2",
  "Test/TestTopics/Topic3",
  "tokudu/client1"
 };
 private final static int[] QOS_VALUES = {0, 0, 2, 0};
 
 //////////////////
 private MqttClient mqttClient = null;
 
 public SubscribeClient(String i){
  try {
   mqttClient = new MqttClient(CONNECTION_STRING);
   SimpleCallbackHandler simpleCallbackHandler = new SimpleCallbackHandler();
   mqttClient.registerSimpleHandler(simpleCallbackHandler);//注册接收消息方法
   mqttClient.connect(CLIENT_ID+i, CLEAN_START, KEEP_ALIVE);
   mqttClient.subscribe(TOPICS, QOS_VALUES);//订阅接主题
   
   /**
    * 完成订阅后,可以增加心跳,保持网络通畅,也可以发布自己的消息
    */

   mqttClient.publish(PUBLISH_TOPICS, "keepalive".getBytes(), QOS_VALUES[0], true);
   
  } catch (MqttException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

 /**
  * 简单回调函数,处理client接收到的主题消息
  * @author pig
  *
  */
 class SimpleCallbackHandler implements MqttSimpleCallback{

  /**
   * 当客户机和broker意外断开时触发
   * 可以再此处理重新订阅
   */
  @Override
  public void connectionLost() throws Exception {
   // TODO Auto-generated method stub
   System.out.println("客户机和broker已经断开");
  }

  /**
   * 客户端订阅消息后,该方法负责回调接收处理消息
   */
  @Override
  public void publishArrived(String topicName, byte[] payload, int Qos, boolean retained) throws Exception {
   // TODO Auto-generated method stub
   System.out.println("订阅主题: " + topicName);
   System.out.println("消息数据: " + new String(payload));
   System.out.println("消息级别(0,1,2): " + Qos);
   System.out.println("是否是实时发送的消息(false=实时,true=服务器上保留的最后消息): " + retained);
  }
  
 }
 
 /**
  * 高级回调
  * @author pig
  *
  */
 class AdvancedCallbackHandler implements MqttSimpleCallback{

  @Override
  public void connectionLost() throws Exception {
   // TODO Auto-generated method stub
   
  }

  @Override
  public void publishArrived(String arg0, byte[] arg1, int arg2,
    boolean arg3) throws Exception {
   // TODO Auto-generated method stub
   
  }
  
 }
 
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
   new SubscribeClient("" + i);

 }

}

broker服务器,MQTT的jar包,记得下载啊,没有就消息我咯~

========================================
到这里,如果完成IBM 的MQTT协议实现push消息的实例的,
都会有个问题,好像没考虑到安全问题,如果客户端连上来作乱怎么办呢?

上面用的broker时rsmb的,mqtt的简单服务器。
IBM已经推出了MQTT V3.1版本,已经加入了安全验证机制,不要怕啦。
据国外网友说,facebook在2011年8月就是用的mqtt v3.1做的应用哦。

到这里MQTT学习资料整理差不多了,下篇,mqtt v3.1版本服务器的测试使用。

分享到:
评论

相关推荐

    采用MQTT协议实现Android消息推送.docx

    本文将探讨如何采用MQTT协议实现Android消息推送,并对比其他几种常见的推送方案,包括GCM服务、XMPP协议和HTTP轮循方式。MQTT协议因其轻量级、高效和低耗能的特性,成为Android消息推送的理想选择。 首先,我们来...

    MQTT协议实现android消息推送

    **MQTT协议实现Android消息推送** 在移动应用开发中,实时消息推送是一项关键功能,它能让用户及时接收到新信息、通知或者系统更新等。本文将深入探讨如何使用MQTT(Message Queuing Telemetry Transport)协议来...

    采用MQTT协议实现Android消息推送.pdf

    。。。

    Android开发之基于MQTT协议实现消息的即时推送

    【作品名称】:Android开发之基于MQTT协议实现消息的即时推送 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: ...

    MQTT协议实现的推送功能

    总的来说,MQTT协议在实现消息推送功能时,提供了高效、可靠的通信方式,尤其适合资源有限的移动设备和物联网设备。通过服务端和客户端的合理设计与实现,我们可以构建一个稳定、安全的消息推送系统。

    [Android实例] MQTT协议,Android消息推送

    本文将深入探讨如何在Android应用中实现MQTT协议的消息推送。 首先,理解MQTT协议的核心概念: 1. **发布/订阅模型**:与传统的客户端-服务器模型不同,MQTT采用发布者和订阅者模型。发布者发送消息到主题,订阅者...

    MQTT方式实现Android推送服务器端

    MQTT(Message Queuing Telemetry ...在实际开发中,需要结合Android客户端、服务器端和Web前端,通过MQTT协议实现消息的实时推送。同时,需要考虑网络条件、设备性能、电池寿命等因素,优化推送效率和用户体验。

    mqtt协议实现 Android推送(服务端、客户端代码)

    本文将深入探讨如何使用MQTT协议在Android平台上实现推送服务,包括服务端和客户端的代码实现。 一、MQTT协议基础 1. **协议特点**:MQTT设计目标是低开销、低带宽和高可靠性,适用于移动设备和网络条件差的环境。...

    Android mqtt协议 推送

    `AndroidPushNotifications.zip`可能包含了如何结合MQTT协议发送Android推送通知的示例。当收到MQTT消息时,应用可以触发系统级的通知,让用户知道新消息的到来。这通常涉及到使用`NotificationCompat.Builder`创建...

    Android基于mqtt消息推送通知指南

    一种更好的解决方案是采用 MQTT(Message Queue Telemetry Transport)协议实现 Android 推送。MQTT 是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案。我们可以使用 IBM ...

    基于RocketMQ的MQTT消息推送服务器分布式部署方案.pdf

    MQTT 协议是Android 系统中消息推送的实现技术之一, 由于其具有低功耗、节省流量和可扩展性强的优点, 目前已得到了众多应用. 同时, RocketMQ 作为一种分布式消息队列, 在服务器分布式部署上具有很大优势, 具有高...

    Android MQTT消息推送

    本文将深入探讨Android平台上实现MQTT消息推送的相关知识点。 ### MQTT协议简介 MQTT协议基于TCP/IP协议栈,采用发布/订阅模型。在这个模型中,客户端可以作为发布者发送消息,也可以作为订阅者接收消息。消息主题...

    Android平台 消息推送MQTT协议方案

    在Android平台上实现消息推送,MQTT(Message Queuing Telemetry Transport)协议是一个高效且轻量级的选择,尤其适合资源有限的移动设备。本方案详细介绍了如何在Android应用中利用MQTT进行消息推送,并且已经在...

    Android 基于MQTT的安卓消息推送php服务端源码+安卓端源码-IT计算机-毕业设计.zip

    此外,这个项目也适合于毕业论文,可以探讨MQTT协议在移动设备上的优势,比较不同消息队列协议的效果,分析Android应用中实现消息推送的挑战和解决方案,以及可能的安全问题和对策。 总之,这个"基于MQTT的安卓消息...

    Android使用MQTT协议推送消息

    总的来说,通过集成Paho MQTT Client库,Android开发者可以轻松地实现在应用程序中使用MQTT协议进行消息推送。理解MQTT的工作原理和API用法,以及如何处理连接状态的变化,是构建可靠、高效的推送服务的关键。

    MQTTDemo在Android上的实现

    在Android平台上实现MQTT推送,可以帮助开发者高效地进行实时数据传输,比如应用通知、设备状态更新等。下面将详细介绍如何在Android上实现MQTTDemo。 首先,我们需要理解MQTT协议的基本概念: 1. **发布/订阅模型...

    MQTT、XMPP、GCM、Mosquitto资料合集

    Android推送方案分析(MQTT、XMPP、GCM).doc Android推送服务(GCM) .doc GCM:入门.doc Mosquitto简要教程(安装&使用).doc 开源broker软件mosquitto(mqtt v3.1支持协议).doc 采用MQTT协议实现Android消息推送.doc

    基于MQTT协议的消息推送服务器.pdf

    本文介绍了MQTT协议的基本内容和特点,以Mosquitto、Redis等开源项目为基础设计并实现了一个基于MQTT协议的消息推送服务器,能够对用户订阅的消息进行推送,同时还实现了用户身份验证、ACL权限检查、自动订阅话题、...

    android Mqtt推送 源码

    【Android MQTT推送源码解析】 在移动应用开发中,实时通信功能是不可或缺的一部分,而 MQTT(Message Queuing ...通过以上步骤,你可以构建一个可靠的Android推送系统,确保实时消息在移动设备上得到有效的传递。

Global site tag (gtag.js) - Google Analytics