关于这个话题,已经不是什么新鲜事了。对于大多数中小型公司一般都是选择第三方的服务来实现。但是现在已经有很多提供推送服务的公司和产品,如何选择一个适合自己项目的服务呢?它们之间都有什么差别?在此为大家做了一个简单的调研,希望可以帮到大家。
简介:
手机推送服务是指服务器定向将信息实时送达手机的服务。推送服务,主要就是将最新资讯和最近的活动信息及时推送给用户,与用户保持互动,从而提高用户粘性,提升用户体验。例如,微信,新浪微博等APP的通知栏消息。
原理:
1)轮询(Pull)方式:应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池。
2)SMS(Push)方式:在Android平台上,你可以通过拦截SMS消息并且解析消息内容来了解服务器的意图,并获取其显示内容进行处理。这是一个不错的想法,我就见过采用这个方案的应用程序。这个方案的好处是,可以实现完全的实时操作。但是问题是这个方案的成本相对比较高,我们需要向移动公司缴纳相应的费用。我们目前很难找到免费的短消息发送网关来实现这种方案。
3)持久连接(Push)方式:这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。IOS平台的推送服务之所以工作的很好,是因为每一台手机仅仅保持一个与服务器之间的连接,事实上C2DM也是这么工作的。不过刚才也讲了,这个方案存在着很多的不足之处,就是我们很难在手机上实现一个可靠的服务,目前也无法与IOS平台的推送功能相比。
了解了原理之后对于我们这样的中小型公司开发一个自己的推送服务还是比较高成本的,时间成本也比较高。为了快速开发,我们一般会选择第三方推送服务。
国内常用解决方案:
一、MQTT协议实现Android推送功能
采用MQTT协议实现Android推送功能也是一种解决方案。MQTT是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案。
wmqtt.jar 是IBM提供的MQTT协议的实现。我们可以从这里(https://github.com/tokudu/AndroidPushNotificationsDemo)下载该项目的实例代码,并且可以找到一个采用PHP书写的服务器端实现(https://github.com/tokudu/PhpMQTTClient)。
架构如下图所示:
<ignore_js_op>
wmqtt.jar 是IBM提供的MQTT协议的实现。我们可以从如下站点下载(http://www-01.ibm.com/support/docview.wss?rs=171&uid=swg24006006)它。我们可以将该jar包加入自己的Android应用程序中。
-------------------------------------------------
二、RSMB实现推送功能。
Really Small Message Broker (RSMB) ,他是一个简单的MQTT代理,同样由IBM提供,其查看地址是:http://www.alphaworks.ibm.com/tech/rsmb。缺省打开1883端口,应用程序当中,它负责接收来自服务器的消息并将其转发给指定的移动设备。
SAM是一个针对MQTT写的PHP库。我们可以从这个http://pecl.php.net/package/sam/download/0.2.0地址下载它.
send_mqtt.php是一个通过POST接收消息并且通过SAM将消息发送给RSMB的PHP脚本。
-------------------------------------------------
三、XMPP协议实现Android推送功能
XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。
androidpn是一个基于XMPP协议的java开源Android push notification实现。它包含了完整的客户端和服务器端。
这是androidpn的项目主页:http://sourceforge.net/projects/androidpn/
androidpn实现意图如下图所示:
<ignore_js_op>
上面的这些都是目前比较流行的解决办法,但是都有一定的难度和实现成本。在这里我主要介绍快速解决方案第三方平台。
第三方平台服务实现推送功能:
进过调查,第三方推送服务有20多个。下面推荐了四个主流的推送平台。
个推
<ignore_js_op>
个推是由国内个信互动网络科技有限公司所推出的平台,帮助企业的应用通过低成本互联网通道进行消息推送,提供完善、高效、稳定的服务体系,解决了互联网云端到手机端的消息互通问题,依托于已有成熟的推送技术,建立更加稳定符合市场需求的标准化服务平台。
功能特色:
1、稳定高效:单台服务器并发支持200-400万,业内领先;推送下发速率可达20万/秒,消息到达率96%以上;多个APP合并一条长连接,共享链路。
2、个推不仅能提供云端到客户端的推送服务,也可以提供从客户端上传至云端的服务,即推送消息链路支持上下行双向通道,开发者与客户端之间互动更便利。
3、支持增量更新:当开发者在个推后台提交APP新版本时,个推可向用户推送告知有新版本,用户只需下载差量部分的文件,提升更新率与产品体验。
4、支持富媒体推送
---------------------------------------------------
极光推送
<ignore_js_op>
极光推送,英文简称 JPush,是一个面向普通开发者开放的,部分免费的第三方消息推送服务。极光推送使得开发者可以即时地向其应用程序的用户推送通知或消息,与用户保持互动,从而有效地提高留存率,提升用户体验。平台提供整合了Android推送、iOS推送的统一推送服务。
功能特色:
1、灵活的推送目标,可以向具体的单个用户推送。
2、支持富媒体推送
3、比较稳定,效率较高
-----------------------------------------------------
百度云推送
<ignore_js_op>
百度云推送(Push)是百度开放云向开发者提供的消息推送服务;通过利用云端与客户端之间建立稳定、可靠的长连接来为开发者提供向客户端应用推送实时消息服务。百度云推送服务支持推送三种类型的消息:通知、透传消息及富媒体;支持向所有用户或根据标签分类向特定用户群体推送消息。
功能特色:
1、多个APP合并一条长连接,共享链路。
2、推送策略中除了用户分组和标签还有位置的区分(定位功能)。
3、百度账户系统支持(百度账户的登录)
4、SDK体积小
5、支持富媒体推送
------------------------------------------------------
友盟推送
<ignore_js_op>
友盟是中国最专业、最有数据凝聚力的移动开发者服务平台,于2010年4月在北京创建。友盟以移动应用统计分析为产品起点,发展成为综合性的移动开发者服务平台。友盟推送是一款帮你将应用的内容更新或活动通知主动推送给终端用户,让用户第一时间获取到相关信息,有效提升用户活跃度和留存率的一种服务。
功能特色:
1、多个APP合并一条长连接,共享链路
2、推送策略中除了用户分组和标签还有位置的区分(定位功能)。
--------------------------------------------------------
更多的推送平台:
各大平台对比:
平台 | 个推 | 百度云推送 | 极光推送 | 友盟推送 |
稳定性和到达率 | 单台服务器并发支持200-400万,推送下发速率可达20万/秒 | 百度强大的服务器集群,吞吐能力强 | 服务端先进技术架构,高并发可扩展性的云服务 | 消息推送所有人时有延迟,不支持富媒体推送 |
电量和流量 | 多个APP合并一条长连接,共享链路。SDK特意针对手机优化,空载耗电每日15-50毫安,空载流量0.8-1.2M/月 | 单通道技术,多应用共享一个推送通道。 | 客户端 SDK 采用自定义的协议保持长连接,电量、流量消耗都很少 | 多应用共享一个长连接、智能心跳等优化方案。 |
安全性 | 数据加密 | 安全隔离技术 | 一般加密 | 一般加密 |
消息推送 | 推送通知 推送消息 推送富媒体 没有LBS推送 | 推送通知 推送消息 推送富媒体 基于地理位置的推送(或“LBS推送”) | 推送通知 推送消息 推送富媒体 没有LBS推送 | 推送通知 推送消息 没有富媒体 没有LBS推送 |
后台数据统计 | 数据报表支撑,智能化分析推送 | 提供推送信息和用户行为的统计 | “推送报表”与“用户统计报表”呈现推送的效果和应用发展趋势。 | 提供推送信息和用户行为的统计 |
SDK接入难度/成本 | 中文文档,技术支持 | 有中文文档,技术支持 | 中文文档,技术支持 | 中文文档,技术支持 |
收费情况 | 部分功能收费 | 免费 | 部分功能收费 | 免费 |
服务器端支持 | 支持Java,PHP,C#,Python,Node.js服务端 | 支持Java,PHP,C#,Python,Node.js服务端 | 支持Java,PHP,C#,Python,Node.js,Ruby 服务端 | 支持Java,PHP,Python 服务端 |
消息推送策略 | 广播推送 标签推送 别名推送 用户分组 | 广播推送 标签推送 别名推送 用户分组 地理区域划分推送。 | 广播推送 标签推送 别名推送 用户分组 | 广播推送 标签推送 别名推送 用户分组 地理区域划分推送。 |
案例 | 新浪微博,墨迹天气,唱吧,PPTV,美图秀秀等 | 糗事百科,Gif快手 | 珍爱网,超级课程表,美咖相机 | 暴风影音,南方周末,别踩白块 |
额外功能 | app增量更新 | 百度账户系统登录 | |