我爱编程

mqtt推送给android

2018-04-15  本文已影响192人  simoscode

1前言

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

2吐槽

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

3自己动手丰衣足食

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

3.1mqtt服务器搭建

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

给用户分配vhost 给用户分配topic

3.2服务端编写

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

mqtt推送组件实现流程图

3.3客户端

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

4小结

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

上一篇 下一篇

猜你喜欢

热点阅读