android实现主动推送小结

openkk 12年前

推送功能,大致能用其实就这么两种,一种pull和一种push:

所谓pull就是客户端做论询,定期从服务端指定接口获取数据

而push就是目前较主流的,服务端主动推数据到客户端(IOS实现起来很简单)

 

而实现方式呢,能用其实就几种

1,MQTT(IBM的一套轻量订阅)

2,http长连接(使用keep-alive技术,http1.0 需要添加此字段  http1.1默认是开启的)

3,   AndroidPn(开源框架都有)

 

我目前只跑通了 mqtt 和 androidPn 对于http长连接个人不建议用,我也没有去尝试

 

一,MQTT小结一下

参考下面链接:

构建Android Push Notification Service服务端及客户端[含代码]  (MQTT及php的)
http://blog.csdn.net/huzhangyou/article/details/7314988


没有做过验证,到底可以支持多少用户在线,想过一种方式,服务端做处理,监听在线用户量,当达到极限时,退出一部分在线用户,比如让其sleep 10分钟(通知方式呢,可以以通知的方式指定字段告诉客户端),,,以减少服务端压力

另外MQTT其实已经是socket长连接了,只是维护工作放到了客户端来做,断线重连等(早知道有现成的当初就不自己写套socket维护机制了)

然后,说下推送方式,抓到了调用了地址
http://apache服务器地址/androidpushservice/send_mqtt.php?target=tokudu%2F设备ID&message=内容

替换红色的字段就可以实现调用一个地址推送数据了,,

另外如果要做群发,,没想到怎么做好,可以服务端做异步对列么?留给大家讨论下

 

二,AndroidPn小结

参考资料

Android Push Notification实现信息推送使用
http://www.cnblogs.com/hanyonglu/archive/2012/03/16/2399655.html

推送数据到指定设备上

http://配置的服务器地址/notification.do?action=send&broadcast=N&username=设备名&title=提醒&message=内容&uri=动作
推送数据到所有在线设备上
http://配置的服务器地址/notification.do?action=send&broadcast=Y&username=&title=提醒&message=内容&uri=动作

 

 

最后说下,根据项目需求,可能还需要做是否收到提醒的反馈?是否要发送到指定部分用户群中,,因此比较后,建议使用AndroidPn因为服务端可编辑的多,

安装方式都不难

MQTT:windows 或 linux 需安装mosquitto,,它会监听1833端口,,客户端会通过wmqtt与服务器的1833端口挂上连接(目前服务端只看到有一套php的运行环境)

AndroidPn : windows和linux都能一键运行(需求复杂的话可编辑源码重新生成部署),安装后,会监听7070端口和5222端口 客户端会通过asmack去连接服务端的5222端口