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



简介:

手机推送服务是指服务器定向将信息实时送达手机的服务。推送服务,主要就是将最新资讯和最近的活动信息及时推送给用户,与用户保持互动,从而提高用户粘性,提升用户体验。例如,微信,新浪微博等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. Win10 UEFI +Ghost +intel快速启动 新法完美安装

    http://tieba.baidu.com/p/4767004289?qq-pf-to=pcqq.c2c Win10 如果主板不用Bios 而用UEFI引导启动,速度快,界面好.现在一般都用win1 ...

  2. file_get_contents failed to open stream: HTTP request failed(一个字符决定成败)

    file_get_contents 开始成功了.后来不知怎么的就报错,调试半天没发现什么问题. 结果.里面多了一个"空格"就报错.去掉空格就好了,你们仔细找找吧.

  3. busybox下的tftp client

    # tftp -p -l file host    # put local file to remote host # tftp -g -r file host    # get remote fil ...

  4. 【Spring学习笔记-3.1】让bean获取spring容器上下文(applicationContext.xml)

    *.hl_mark_KMSmartTagPinkImg{background-color:#ffaaff;}*.hl_mark_KMSmartTagBlueImg{background-color:# ...

  5. python学习笔记--smtp模块的使用及常见错误处理

    SMTPAuthenticationError: (535, 'Error: \xc7\xeb\xca\xb9\xd3\xc3\xca\xda\xc8\xa8\xc2\xeb\xb5\xc7\xc2\ ...

  6. 初次从eclipse转到intellij idea上的一些经验

    如果出现:mvn 请使用 -source 7 或更高版本以启用 diamond 运算符 这种问题 pom.xml里 <build>标签里面 需要加入这么一段 <plugins> ...

  7. skopt学习之路1-函数介绍:dummy_minimize

    def dummy_minimize(func,dimensions,n_calls=100, x0=None, y0=None, random_state=None, verbose=False, ...

  8. java 总结代码块

    判断str2在str中出现了多少次: //msg: // // 世界上最痛苦的事 莫过于有眼睛却发现不了美 有耳朵却不会欣赏音乐 有心灵却无法理解什么是最真 // 世界上最痛苦的事 莫过于错过了不该错 ...

  9. How to Use vcpkg On Windows

    Introduction If you do any sort of C++ development on Windows, then you know that library/package ma ...

  10. delphi WebBrowser的使用方法详解(三)

    WebBrowser 操作记要 WebBrowser1.GoHome;  //到浏览器默认主页 WebBrowser1.Refresh;  //刷新 WebBrowser1.GoBack;  //后退 ...