如何采用mqtt协议实现android消息推送

 我来答
极光开发者服务
2021-07-20 · 超过370用户采纳过TA的回答
知道小有建树答主
回答量:549
采纳率:0%
帮助的人:135万
展开全部
使用一个代理服务器message broker,客户端client连接上这个服务器,然后告诉服务器,可以接收哪些类型的消息,同时client也可以发布自己的消息,这些消息根据协议的内容,可以别的client获取。这样就实现了消息推送。
消息推送是通过一定的技术标准或协议,在互联网上通过定期传送用户需要的信息来减少信息过载的一项新技术。
如果想要使用消息推送,推荐使用深圳极光的消息推送系统。深圳极光是国内首个为移动应用开发者提供专业、高效的消息推送服务的产品。品牌成长的过程,就是与客户肩并肩迈向成功的过程。极光将以市场为导向,以创新为动力,以技术为支持,不断用心努力,为每一位尊贵的客户提供极致的服务。

huanglenzhi
推荐于2016-02-21 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517199
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  MQTT是一项消息传递技术,由IBM再2001年发布。

  总结一下,机制就是使用一个代理服务器messagebroker,
  客户端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版本,已经加入了安全验证机制,不要怕啦。

  转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式