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



简介:

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

    数据库实际上是系统逻辑在磁盘上的固化,是信息河流的蓄水池. 数据库的表应有如下类型 1)类表.配置表.作为业务逻辑基本的名字,状态的定义,作为构建逻辑世界的最基础框架,解释框架的框架. 特点,数据不会 ...

  2. Python基础学习笔记,进阶学习笔记 出处

    参考 虫师-博客 http://www.cnblogs.com/fnng/category 随笔分类相关文章

  3. win7一键拖动生成快速启动栏

    一键拖动生成快速启动工具栏 ^#x:: ;自动添加快速启动工具栏 if had_added() ExitApp ql_add() Sleep, if (is_locked()) { lock_unlo ...

  4. DP Coins hdoj

    Coins Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submiss ...

  5. [UE4]代理事件(C++)

    用宏定义类似格式: DECLARE_DELEGATE //普通代理 DECLARE_DYNAMIC_DELEGATE_TwoParams //动态代理 DECLARE_DYNAMIC_MULTICAS ...

  6. sql中存储过程打印返回的记录集

    declare --返回结果,记录类型 ret sys_refcursor; --定义一种类型,用来存放返回的记录 type typ_row ), QUEUEID ), QUEUE_NAME )); ...

  7. 试讲DOCKER专用

    内容概要: DOCKER简介 为什么要用DOCKER DOCKER的应用场景 DOCKER基础 一 DOCKER简介 Docker是Docker.Inc公司开源的一个基于轻量级虚拟化技术的容器引擎项目 ...

  8. matlab批量修改图片大小

    转自:http://blog.csdn.net/cike0cop/article/details/53087995 %author:coplin %time:2016-10-10 %function: ...

  9. css border

    CSS border用于设置HTML元素(如div)的边框,包括边框的宽度.颜色和样式.本文章向码农介绍CSS border边框属性详细内容,感兴趣的码农可以参考一下. CSS 边框即CSS bord ...

  10. blktrace未公开选项网络保存截取数据

    本文链接地址: blktrace未公开选项网络保存截取数据 我们透过blktrace来观察io行为的时候,第一件事情需要选择目标设备,以便分析该设备的io行为.具体使用可以参考我之前写的几篇:这里 这 ...