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



简介:

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

    一.信号生命周期 从信号发送到信号处理函数的执行完毕 对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生:信号在进程 ...

  2. jsoncpp 构造空数组

    因为要构造类似如下的 {"FurnitureItemObject":[],"FurniturePlaceItemObject":[],"RoomNum ...

  3. selenium操作隐藏的元素 (下拉框类型)

    有时候我们会碰到一些元素不可见,这个时候selenium就无法对这些元素进行操作了.例如,下面的情况: Python 页面主要通过“display:none”来控制整个下拉框不可见.这个时候如果直接操 ...

  4. Logstash之四:配置说明

    logstash配置文件包含三个配置部分: 分别为:input{}.filter{}.output{}.{} 定义区域,区域内可以定义一个或多个插件,通过插件对数据进行收集,加工处理,输出. 在{}配 ...

  5. 杂项-自动化测试工具:Selenium(浏览器自动化测试框架)

    ylbtech-杂项-自动化测试工具:Selenium(浏览器自动化测试框架) Selenium 是一个用于Web 应用程序测试的工具.Selenium 测试直接运行在浏览器中,就像真正的用户在操作一 ...

  6. LDA-MySql

    http://blog.csdn.net/white_smile/article/details/19565701

  7. [UE4]组件

    用来组成Actor的子对象,Actor是由组件组成的. 几个关键的Component类型: 一.UActorComponent 这个Component的基类,可以被放到Actor里面, 可以接受Tic ...

  8. 对于入门Demo的看法

    对于一些以前没有接触过的技术,网上一搜,了解一些介绍信息,原理以及一些代码API的大致了解,接下来应该开始一个小Demo例子. 网上现在好多的教材,多数不知是怎么写的,基本大致一个样,对于初学者没什么 ...

  9. logger常用方法

    #!/usr/bin/env python # encoding: utf-8  # Date: 2018/5/25 import loggingfrom logging import handler ...

  10. mysql数据表自动导为python sqlalchemy可操作对象

      1.pip install sqlacodegen pip install pymysql 在/usr/lib/python/site-packages/sqlacodegen/main.py中添 ...