Android消息推送实现想法
一、 背景简介
用户使用门禁系统客户端软件的时候一般会使软件处于关闭状态,而不会一
直打开软件并一直关注App上的动态。然而当服务器端发送视频通话请求的时候又需要持有门禁系统客户端的用户能在第一时间知道该请求并对其进行响应。因此,门禁系统设计时就需要有一套及时、合理、可靠、有效的消息提醒机制。
二、 功能概述
- 服务器端
发送请求。当用户点击服务器端的通话请求按键的时候,服务器端就会
发送请求到服务器,服务器再发送推送消息到客户端。
2.客户端
消息响应。当收到来自服务器的请求消息后,客户端就会使手机在通知区域弹出消息提醒框,并可支持让手机闪屏、振动或者发出铃声。
请求处理。当用户点击通知区域中相应的消息提醒框后,就会触发弹出客户端应用的一个Activity,该Activity可显示来自服务器端的视频信息,同时用户可通过Activity上的按键选择接受通话或者拒绝通话。
三、 消息推送方案对比
方案1、使用GCM服务(Google Cloud Messaging)
简介:Google推出的云消息服务,即第二代的C2DM。
优点:Google提供的服务、原生、简单,无需实现和部署服务端。
缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google。
方案2、使用HTTP轮循方式
简介:定时向HTTP服务端接口(Web Service API)获取最新消息。
优点:实现简单、可控性强,部署硬件成本低。
缺点:实时性差。
方案3、使用XMPP协议(Openfire + Spark + Smack)
简介:基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作。
优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。
缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。
方案4、使用MQTT协议
简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。
优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域,且已有C++版的服务端组件rsmb。
缺点:不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。
方案5、使用第三方平台。
如极光推送、ANPS.
优点:无需架设服务器、开源免费
四、 消息推送方案选择
基于可靠性和实时性双方面的考虑,方案1和方案2 将不会被采纳。
方案3 推荐的androidpn我们自己搭建并且实现过,存在着以下问题:
1. 如果将消息从服务器上推送出去,就不再管理了,不管消息是否成功到达客户端手机上。
2. 性能上也不够稳定,推送消息经常发送不成功。
3. 服务器重启后客户端就连不上了。
参考资料:
androidpn官网
http://sourceforge.net/projects/androidpn/
如何使用androidpn实现android手机消息推送(简单的源码分析)
http://blog.csdn.net/flyingdog08/article/details/7336319
androidpn 作为Android推送方案存在的问题
http://www.oschina.net/question/861681_79887
Android Push Notification实现信息推送使用
http://www.cnblogs.com/hanyonglu/archive/2012/03/16/2399655.html
方案4 MQTT协议
这个没有亲自试验过,不过找到几篇参考文章。
基于MQTT协议推送Android消息
http://www.open-open.com/lib/view/open1352431806309.html
MQTT的学习研究
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=230754
方案5使用第三方平台
没有试过,但有参考网站
使用免费服务轻松实现push notification
http://www.eoeandroid.com/thread-97597-1-1.html
极光推送官方地址:
总结:
这些功能别人都帮我们封装的比较好了,实现上难度应该不会很大,只需要套用他们的模块并稍微定制化下即可,难的是如何根据这些信息选择一款适合我们的推送机制。我觉得如何时间允许的话,可以试一下MQTT协议和第三方协议。
五、 后续工作
单独的推送Demo代码源码网上很多可以下载,我们要做的是如何优化Demo代码并整合到我们的门禁系统中,我能想到的工作主要如下:
客户端:
1. 选择合适的推送方案并熟悉相应的Demo源码
2. 将推送Demo源码整合到门禁客户端
机械化地将代码捏倒一起后,在Demo中添加一个按键,点击该按键后跳转到我们门禁客户端某个Activity上初步完成代码整合。
3. 优化启动Activity界面。
进一步优化启动Activity界面,该界面可提供用户两个按钮,分别为“接受请求”和“拒绝请求”,如果可行的话,直接能在该Activity中显示客户端视频信息更好。
4. 优化 Notification的图标、提醒方式。
这个比较后期了,可以修改客户端Notification上的图标、文字、标题以及提醒方式。
服务器端:
1.熟悉推送服务器上HTML代码,以便门禁服务器端通过URL控制推送服务器向门禁客户端发送推送请求。