关于这个话题,已经不是什么新鲜事了。对于大多数中小型公司一般都是选择第三方的服务来实现。但是现在已经有很多提供推送服务的公司和产品,如何选择一个适合自己项目的服务呢?它们之间都有什么差别?在此为大家做了一个简单的调研,希望可以帮到大家。



简介:

手机推送服务是指服务器定向将信息实时送达手机的服务。推送服务,主要就是将最新资讯和最近的活动信息及时推送给用户,与用户保持互动,从而提高用户粘性,提升用户体验。例如,微信,新浪微博等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增量更新
百度账户系统登录
 

android热门消息推送横向测评![转]的更多相关文章

  1. Android开发学习笔记-关于Android的消息推送以及前后台切换

    下面是最简单的Android的消息推送的实现方法 package com.example.shownotic; import java.util.Random; import android.supp ...

  2. Android客户端消息推送原理简介

    首先简单介绍一下Android消息推送的主要三种方式,如果你已经看过类似的文章,请直接忽略三种介绍.    1.使用SMS服务,即服务器端发送短信,然后手机客户端监听短信的广播,然后对数据进行一定的处 ...

  3. [android] 安卓消息推送的几种实现方式

    消息推送的目的:让服务器端及时的通知客户端 实现方案 轮询:客户端每隔一定的时间向服务器端发起请求,获得最新的消息 特点:如果用在最新新闻通知上,效率就有点低了,技术简单,好实现 应用场景:服务器端以 ...

  4. Android 生态消息推送平台介绍

    一.手机厂商平台 华为消息推送服务 华为推送(Push)是为开发者提供的消息推送平台,建立了从云端到手机端的消息推送通道,使应用可以将最新信息及时通知用户,从而构筑良好的用户关系,提升用户的感知和活跃 ...

  5. Android (Notification)消息推送机制

    从网上查询资料学习Android消息推送机制,效果图如下: 1.首先是布局文件代码 activity_main.xml <?xml version="1.0" encodin ...

  6. Android本地消息推送

    项目介绍:cocos2dx跨平台游戏 项目需求:实现本地消息推送,需求①:定点推送:需求②:根据游戏内逻辑实现推送(比如玩家体力满时,需要计算后到点推送):需求③:清理后台程序或重启后依然能够实现本地 ...

  7. Android之消息推送实现

    在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相 ...

  8. iOS/Android网络消息推送的实现两种方法

    移动时代,用户为王,而每个APP拥有的活跃用户量(Active Users),决定了其价值. 消息推送成为了不可或缺的活跃唤起工具. 目前消息推送有如下两种途径: 1.iOS传统方式: 通过Apple ...

  9. Android后台消息推送-android学习之旅(71)

    建议使用第三方的sdk,比如极光推送,小米推送,百度推送

随机推荐

  1. 2017头条笔试题:二维点集中找出右上角没有点的点并按x坐标从小到大打印坐标

    PS:这篇是之前本来就想发的但是一直没时间写,加上今天做了京东的题,结果代码名就命名为jingdong了……懒得改代码名重新跑一遍结果了=.= 暴力法去做就是遍历每个点,判断它是不是“最大点”.判断过 ...

  2. VS2010安装顽疾解决方法:error 25541 failed to open xml file

    一.问题描述 因为之前(2012)对HDFS客户端Thrift接口的库文件封装使用的是VS2010,最近考虑做一个完整的网盘系统的客户端,就把该库文件使用起来,比较悲剧的是之前做过操作系统的还原.我的 ...

  3. SpringCloud之最大的坑

    就一句话,controller里面的API方法千万不要夹@Bean,因为加了这个就变成预编译的了!!!!不能断点不能log!!!!!!当然,如果想项目启动就执行的话,那就加上这个.

  4. python处理excel(二):写

    代码参考自zhoujie.函数接口可参考该blog. 基本的write函数接口很简单: 新建一个excel文件 file = xlwt.Workbook() (注意这里的Workbook首字母是大写) ...

  5. 小峰servlet/jsp(3)登陆功能实现

    一.User模型: User.java: package com.java1234.model; public class User { private int id; private String ...

  6. my sql 只展示 前10条数据的写法

    select * from 表 where 条件 limit 10 这里想看多少条 limit 后面的数字就是多少

  7. sublime快捷键功能记录

    shift+tab  向前缩进 ctrl+shift+k  删除当前行 菜单栏 view--side bar 选项 控制左侧文件展示视图 菜单栏“view”——“hideMiniMap” or &qu ...

  8. 阿里云上部署tomcat启动后,通过http不能访问

    原因是因为阿里为了安全设置了安全组策略,必须我们授权的端口,其他计算机才能通过http访问 设置流程: 点击安全组 再点击:配置规则 然后点击:添加安全组规则 开始配置:划红线的必写,授权对象:0.0 ...

  9. linux中的ftp命令

    转载至:https://www.cnblogs.com/mingforyou/p/4103022.html 一.ftp的get命令和mget命令有何不同? get一次只下载一个文件:mget一次可以下 ...

  10. Redis 密码设置和查看密码

    Redis 密码设置和查看密码 redis没有实现访问控制这个功能,但是它提供了一个轻量级的认证方式,可以编辑redis.conf配置来启用认证. 1.初始化Redis密码: 在配置文件中有个参数: ...