android消息推送

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

最开始的想法时本身来实现服务端到客户端的推送,具体以下:html

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

  2. 服务端在有新的消息时经过这个长链接往客户端推送消息网络

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

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

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

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

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

4.百度服务端再把消息经过第1步创建的长链接推送到对应的客户端上blog

最后再与同事沟通后,考虑到百度推送有时不够稳定,不能保证每次推送都能送到,并且有些可能会有丢失的现象,因而只使用百度推送推送打招呼的信息,而后客户端再经过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

相关文章
相关标签/搜索