美文网首页我爱编程
mqtt推送给android

mqtt推送给android

作者: simoscode | 来源:发表于2018-04-15 19:40 被阅读192次

1前言

由于国内使用不了google的系统推送,因此android的消息,通知推送对于小公司来说一直是一个痛点.本人所在公司也不例外,国内比较好的推送有阿里云,极光(未用过,百度过),还有小米推送,华为推送等.

2吐槽

移动推送这种与功能业务无关的组件最好还是用第三方,因为有简单的sdk,api,完善的后台监控.在使用阿里云的移动推送sdk时,发现顺利的情况下到达率很高,速度很快,并且有完备后台管理.但是不太稳定,到达时间从几秒到几分钟不等(在app网络正常且设备在线,查看后台消息/通知常处于'已受理'状态).在app处于后台时(一两小时),华为手机会因为系统的原因导致接收不到,这时候只能融合使用华为的系统推送(阿里云移动推送sdk有相应说明).

3自己动手丰衣足食

由于业务功能要求消息/通知到达速度快.因此也就放弃了阿里云的移动推送.采取的方案是:用户登陆时app上报手机的品牌,推送时如果是华为机直接使用华为官方推送sdk,其他android手机采用mqtt.华为推送sdk,小伙伴可以去试,不在本章讨论范围.

3.1mqtt服务器搭建

本人使用mqtt推送代理服务器是rabbitmq.安装及配置,小伙伴自行百度.本人是参考Linux下安装erlang及rabbitmq这篇博文,以及rabbitmq自身的官方文档.
安装完后步骤如下:

  • 1登陆rabbimq的管理控制台

  • 2创建一个vhost 名称mqtt(自己定的名称)

      创建vhost
  • 3在mqtt这个vhost上创建一个topic类型的exchange (其他属性根据需要去设置)为test.topic


    添加topic
  • 4创建一个用户test并设置密码,Tags为None


    添加用户
  • 5直接点击用户列表上的'test'用户,设置他的vhost permission为mqtt.不知为什么,这里设置topic permission的时候,选择vhost为mqtt,但是仍旧没有把步骤3添加的test.topic加载出来
给用户分配vhost
  • 6选中右侧菜单里面的virtual hosts,底下有一个Topic permissions,这里可以设置用户test拥有test.topic权限
给用户分配topic
  • 7登陆rabbitmq安装的服务器,找到配置文件,找到mqtt这个节点,然后设置vhost为mqtt,exchange为test.topic,用户可以不用设置,因为我们已经在控制台配置好用户的权限了.至此配置的东西就配置好了

3.2服务端编写

服务端使用的spring 提供的mqtt开发组件 ,代码也是参照官方文档编写的,github传送门:源码,源码都有注释小伙伴应该能看懂.demo里只是实现了推送功能,直接在生产环境使用会有性能,稳定性问题.这里提供一个思路"队列+任务池"(实际上本人大体也是这么实现的,这部分代码实现就不贴出来了).流程图(虚线就是自己封装mqtt推送组件)如下:

mqtt推送组件实现流程图

3.3客户端

本人提供给app小伙伴:服务器地址,帐号,密码(为了简单可以配置成与服务端一样,共用同一个帐号).约定好设备订阅topic格式:{前缀}.{andorid设备序列号},这样用户登陆后只需要提供设备序列号,服务端就可以给这个用户推送消息了.画重点:app mqtt 开发sdk推荐使用paho

4小结

整个篇幅只是讲解大体实现流程,很多实现的细节,需要小伙伴自己去琢磨了.尤其是安装配置mqtt,里面有不少坑,因为每个人的系统环境不太一样.

相关文章

网友评论

    本文标题:mqtt推送给android

    本文链接:https://www.haomeiwen.com/subject/lmxhkftx.html