android消息推送
博客专区 > z_jordon 的博客 > 博客详情
android消息推送
z_jordon 发表于3年前
android消息推送
  • 发表于 3年前
  • 阅读 66
  • 收藏 1
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: 简单介绍android消息推送的机制

最近的一个项目要涉及到从服务端往客户端推送消息,类似于滴滴打车的司机端,有新的订单时就往司机的手机推送订单信息。

最开始的想法时自己来实现服务端到客户端的推送,具体如下:

  1. 客户端启动时连上服务端,注册自己的设备id,用户id等信息,并通过socket与服务端维持一个长连接

  2. 服务端在有新的消息时通过这个长连接往客户端推送消息

这个方案看似简单,但仔细推敲起来有许多细节不可控,比如需要考虑各种网络环境,客户端与服务端程序的稳定性,实际上要自己来实现一个稳定的消息推送服务是要花比较长时间的,虽然也有一些现成的方案,比如Google提供的C2DM(Cloudto Device Messaging)服务,采用MQTT协议实现Android推送,采用XMPP协议实现Android推送等(这些网上都可以找到相应的资料),但对于我们现在的项目来说还是需要自己搭建消息推送的服务端和客户端。

然后在网上找了一下原来已经有各种现在的免费的方案了,比如百度推送,极光推送等等,并且文档和demo都比较齐全,这种方案的具体机制如下(以百度推送为例):

 1. 客户端启动时连接上百度推送的服务器,百度推送服务会生成注册设备的设备id,用户id等信息,并通过ocket与百度推送服务端维持一个长连接。

 2.客户端把获取到的百度推送服务生成的设备id,用户id等信息以及自己本身在系统中的用户id(一般这种系统都有个登录的过程的),通过http请求传到服务端进行绑定

3. 服务端在有新的消息时,通过http请求把消息发送到百度服务端

4.百度服务端再把消息通过第1步建立的长连接推送到对应的客户端上

最后再与同事沟通后,考虑到百度推送有时不够稳定,不能保证每次推送都能送到,而且有些可能会有丢失的现象,于是只使用百度推送推送打招呼的信息,然后客户端再通过http请求直接到服务器上去取新消息,这样即使中间有一个新消息遗漏了导致没往客户端发送打招呼信息,但下一次有新的信息时还是可以取到上次遗漏的信息的,于是整个过程变成如下:

1. 客户端启动时连接上百度推送的服务器,百度推送服务会生成注册设备的设备id,用户id等信息,并通过ocket与百度推送服务端维持一个长连接。

 2.客户端把获取到的百度推送服务生成的设备id,用户id等信息以及自己本身在系统中的用户id(一般这种系统都有个登录的过程的),通过http请求传到服务端进行绑定

3. 服务端在有新的消息时,通过http请求发一个打招呼的信息到百度服务端

4.百度服务端再把打招呼消息通过第1步建立的长连接推送到对应的客户端上

5.客户端再发起一个http请求去服务端获取最新的消息列表

但这种机制相对来说就没有那么实时,并且对服务端的压力也比较大,象滴滴打车这种肯定是不适合的,但对于我们项目是足够了。

如果要自己搭建消息推送的机制可参考以下文章:

Android消息推送完美解决方案全析

Android推送通知机制分析

Android消息推送机制

移动手机消息推送机制[转载]

如果想使用百度推送,可参考百度的文档:

http://developer.baidu.com/wiki/index.php?title=docs/cplat/push/scene


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 35
博文 250
码字总数 78212
×
z_jordon
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: