`
gjhappyyy
  • 浏览: 260580 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

移动手机消息推送机制

 
阅读更多

由于公司要做一个android的消息推送功能,让我进行了一个调研,发现网上没有一个集中说明的地方,自己在网上搜罗了一些资料并且自己总结了一下。

对于消息的提醒方式可以分为四种:固定窗口、弹出窗口、手机短信和Push信息。下面的针对于push信息的机制和技术实现向大家介绍一下。

     首先,我们要知道什么是Push信息?

     所谓信息推送,就是"web广播",是通过一定的技术标准或协议,在互联网上通过定期传送用户需要的信息来减少信息过载的一项新技术。推送技术通过自动传送信息给用户,来减少用于网络上搜索的时间。它根据用户的兴趣来搜索、过滤信息,并将其定期推给用户,帮助用户高效率地发掘有价值的信息。

简单的来说,信息推送就是服务器端主动向客户端发送信息,客户端进行接收信息。如下图:

使用推送信息的好处:

1、节省用户的电池电量。
2、你可以通过推送通知来告知你的用户在程序中发生了一些有趣的事,即使程序没有运行。

现在很多应用程序都是用的推送的机制:

包括新浪微博,推送最新的朋友消息;墨迹天气推送最新的天气状况;网易新闻,推送重要的新闻;同花顺手机炒股推送最新的股票资讯;微信,推送最新的语音最新。Gmail、Gtalk推送最新的Mail信息和IM信息。

 

下面,我们了解一下现在主流手机的push机制。

IPhone(APPLE)的工作机制可以简单的概括为下图:

iPhone自3.0之后推出消息推送机制,原理是消息由服务器统一处理。

图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用Java作为Provider。

APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。

上图可以分为三个阶段。

第一阶段:Java应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。

第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。

第三阶段:iPhone把发来的消息传递给相应的应用程序, 并且按照设定弹出Push通知。

 

从上图我们可以看到。

1、首先是应用程序注册消息推送。

2、 IOS跟APNS Server要deviceToken。应用程序接受deviceToken。

3、应用程序将deviceToken发送给PUSH服务端程序。

4、 服务端程序向APNS服务发送消息。

5、APNS服务将消息发送给iPhone应用程序。

APNs和iPhone保持15分钟的心跳式长连接,维护手机和服务器的联系正常,否则手机会不停发起连接,直到连接到服务器为止。程序不必实时开启和主动检查更新,当收到APNs消息时,iPhone会弹出对话框Push消息并伴随着声音,用户可以选择“view”或者“close”。即使用户当前处在离线状态,用户收到消息之后激活程序,再通过程序链接应用服务器下载邮件或者录音。

 

WP7(Microsoft)的Push机制如下图:

WP7的也有相应的推送服务,无论程序是否开启都可以界面顶部推送Toast Notification,并显示10秒。WP7的Push Client负责于服务器交互,接受到消息时再传送给相应的应用程序,而不需要应用程序各自维护一个进程。如果程序被钉在首页,服务器推送瓦片通知(Tile Notification),改变瓦片的背景图片、数字和标题属性。而弹出框式的原生推送(Raw Notification)只能应用在程序开启时,容许实时更新界面

 

WebOS (BlackBerry)的推送机制如下如所示:

 

 

从示意图中可以看到在BlackBerry应用平台上的数据推送从整体上可以分为六步,按时间顺序分别为:

  第一步:应用服务器向MDS/BES服务器发送推送请求,所发送的请求为HTTP格式的请求。

  第二步:MDS/BES服务器查询相关配置数据库,确定应用服务器所发送的请求是否为合法的请求。此外,MDS/BES服务器还会根据资源情况确定是否接收该请求。对于是否接收请求的判断在下一节内容中也有详细讨论

  第三步:MDS/BES服务器向应用服务器返回消息,通知应用服务器是否接受该请求。返回消息以HTTP答复的方式返回给应用服务器

  第四步:MDS/BES服务器将数据推送到手持设备端

   第五步:手持设备端对数据进行处理后向MDS/BES服务器返回确认消息

第六步:MDS/BES根据手持设备端返回的消息决定向应用服务器返回什么异步消息,这一步并不是必然发生的,根据推送请求的不同有可能不发生。

黑莓的推送是最早的,最早应用在邮件上,而且黑莓的推送机制也是加密最好的,最安全的机制。

 

下面我们来详细的介绍一下android的推送机制:

Android(Google):

首先介绍一下google官方应用的push:

1)如果你有新的Gmail邮件,手机可以马上收到邮件通知,这个中间可能有2,3秒的延迟,一般感觉还是很及时的;

2)如果你的联系人和Google Contanct是关联的话,你用桌面浏览器访问Gmail,修改联系人信息,很快新的联系人信息就会同步到你手机上。

在Google I/O 2010 介绍了 Android 2.2 导入的 Android Cloud to Device Messaging (C2DM) 服务, C2DM)作为 Android 2.2 的一部分已经发布了。C2DM 允许第三方开发者开发相关的应用来推送少量数据消息到用户的手机上,其机制如下图:

Android Cloud to Device Messaging (C2DM)是一个用来帮助开发者从服务器向Android应用程序发送数据的服务。该服务提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。C2DM服务负责处理诸如消息排队等事务并向运行于目标设备上的应用程序分发这些消息。

启用C2DM的过程:

     1,移动设备:必须运行android,并且安装Market,至少有一个登录的google账号。

      2,服务器:自己的服务器

      3,C2DM服务器:google的服务器

         授权机制:

1,  Sender ID:一个google账号,用于标示开发者的身份,比如hxzhoupeng@google.com

2,Application ID:Manifest.xml里面的pacakage name。用于标示应用程序

3,Registration ID:当应用程序向C2DM服务器注册时,C2DM服务器会返回这个ID,当应用程序获得这个ID之后,应该告诉自己的服务器,自己的服务器把这个ID存在数据库里面,用于告诉C2DM服务器标示客户端。

4,Google User Account:要使用C2DM服务,必须有一个google账号。

5,Sender Auth Token:自己的服务器与C2DM服务器通信的认证。

 

           应用程序发送Intent,com.google.android.c2dm.intent.REGISTER,附上自己的SenderID和AppId,就可以向C2DM服务器进行注册,注册成功之后,可以收到REGISTRATION Intent,获得Registration ID,这个Registration ID是会被C2DM改变的,所以这个REGISTRATION Intent可能会收到多次,要记得存储和发送给自己的服务器

 

通过对比研究发现C2DM机制存在以下缺点:

1、C2DM内置于Android的2.2系统上,无法兼容老的1.6到2.1系统;

2、C2DM需要依赖于Google官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用,如果想要很好的使用,我们的App Server必须也在国外,这个恐怕不是每个开发者都能够实现的;。

 

 除了C2DM在实现Android消息推送机制的方案还有以下几种:

1、轮询(polling):应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池。

2、长连接:这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。Apple的推送服务之所以工作的很好,是因为每一台手机仅仅保持一个与服务器之间的连接,事实上C2DM也是这么工作的。不过这个方案也存在不足,就是我们很难在手机上实现一个可靠的服务。Android操作系统允许在低内存情况下杀死系统服务,所以你的通知服务很可能被操作系统Kill掉了。

这种方法通过come(基于 HTTP 长连接的“服务器推”技术)长连接也可以实现。详细可以参照http://www.ibm.com/developerworks/cn/web/wa-lo-comet/,但是这并不是最有的一种方式,

在Android下最有的方式应该采取XMPP协议推送Android信息:

首先介绍一下XMPP基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。详细参考:

http://zh.wikipedia.org/zh-cn/XMPP

Google官方的C2DM服务器底层也是采用XMPP协议进行的封装。

androidpn是一个基于XMPP协议的java开源Android push notification实现。它包含了完整的客户端和服务器端。该服务器端基本是在另外一个开源工程openfire基础上修改实现的。它的实现示意图如下:

androidpn客户端需要用到一个基于java的开源XMPP协议包asmack,这个包同样也是基于openfire下的另外一个开源项目smack,不过我们不需要自己编译,可以直接把androidpn客户端里面的asmack.jar拿来使用。客户端利用asmack中提供的XMPPConnection类与服务器建立持久连接,并通过该连接进行用户注册和登录认证,同样也是通过这条连接,接收服务器发送的通知。

androidpn服务器端也是java语言实现的,基于openfire开源工程,不过它的Web部分采用的是spring框架,这一点与openfire是不同的。Androidpn服务器包含两个部分,一个是侦听在5222端口上的XMPP服务,负责与客户端的XMPPConnection类进行通信,作用是用户注册和身份认证,并发送推送通知消息。另外一部分是Web服务器,采用一个轻量级的HTTP服务器,负责接收用户的Web请求。服务器架构如下:

最上层包含四个组成部分,分别是SessionManager,Auth Manager,PresenceManager以及Notification Manager。SessionManager负责管理客户端与服务器之间的会话,Auth Manager负责客户端用户认证管理,Presence Manager负责管理客户端用户的登录状态,NotificationManager负责实现服务器向客户端推送消息功能。

服务器端界面如下,分别对应了上述的几个功能模块:

 

      发送以后,我们可以在手机端看到接收的消息:

      这个解决方案的最大优势就是简单,我们不需要象C2DM那样依赖操作系统版本,也不会担心某一天Google服务器不可用。利用XMPP协议我们还可以进一步的对协议进行扩展,实现更为完善的功能。

采用这个方案,目前只能发送文字消息,不过对于推送来说一般足够了,因为我们不能指望通过推送得到所有的数据,一般情况下,利用推送只是告诉手机端服务器发生了某些改变,当客户端收到通知以后,应该主动到服务器获取最新的数据,这样才是推送服务的完整实现。

 

【转自】http://blog.csdn.net/zphappy/article/details/6658504

【相关文章】http://www.chinaz.com/manage/2011/0808/203769.shtml

分享到:
评论
2 楼 fajaven 2012-11-04  
gjhappyyy 写道
其实不同的厂商实现应用时,实现的推送机制是不同的,有的是靠二进制短信实现,这样速度很快,不受网络影响,但需要付费。另一只就是时间片轮训,这样的方式比较耗性能。但是也是大部分项目采用的一种方式。


欢迎各位在开发一线的朋友发言,探讨!


你这篇文章的确把所有相关的都聚合在一起了。赞一个。

但我想纠正一下的是:短信方式之外,是基于 tcp / ip 网络实现。而这个实现里,不是全是轮询。有两个主要的方式:

1)轮询:客户端定时发起请求去检查,就是所谓的 pull(见上面刚开始的图)。或者有人叫伪 push。现在相当多说实现了 push 的,实际是这个。

2)长连接:APNs, MPNs, GCM 这些本质上都是长连接。即在背后,有一个连接长期维持在那里,所以服务器端的任何消息可以即时地到达客户端。

考虑到国内 Android 上GCM用不了,所以大家讨论得火热的是使用 androidpn 来自己搭建环境。但这个存在很多问题,可参考下这个文章:androidpn 作为Android推送方案存在的问题
1 楼 gjhappyyy 2012-06-11  
其实不同的厂商实现应用时,实现的推送机制是不同的,有的是靠二进制短信实现,这样速度很快,不受网络影响,但需要付费。另一只就是时间片轮训,这样的方式比较耗性能。但是也是大部分项目采用的一种方式。


欢迎各位在开发一线的朋友发言,探讨!

相关推荐

    使用消息推送机制

    ### 使用消息推送机制 #### 概述 微软的Windows Phone推送通知服务(Push Notification Service)为第三方开发者提供了一个高效、专注且可持续的消息传递通道,支持从服务器端向Windows Phone应用程序发送实时更新...

    基于WebService的手机APP消息推送机制研究.pdf

    【基于WebService的手机APP消息推送机制研究】 随着互联网技术的飞速发展,手机应用程序(APP)已经成为人们日常生活和工作中不可或缺的一部分。实时通信在B/S(Browser/Server)架构中的应用日益广泛,涵盖诸如...

    基于WebService的手机APP消息推送机制研究与实现浅析.pdf

    总结而言,基于WebService的手机APP消息推送机制是一种高效、实时的信息传递技术,它不仅满足了用户对于即时信息的需求,更提升了移动应用的整体服务质量。在教育领域,这种技术的应用有助于创建一个智能化、移动化...

    高可用的移动消息推送平台方案.docx

    ### 高可用的移动消息推送平台方案 #### 推送技术背景及意义 随着移动互联网技术的迅猛发展,消息推送已成为提升用户活跃度、增强用户体验的重要手段之一。无论是新闻类APP推送热点资讯,还是社交软件传达即时消息...

    Windows Phone 4. 使用消息推送机制

    微软Windows® Phone推送通知服务(PushNotificationService)为第三方开发者提供了一个弹性、专注、可持续的通道,支持发送消息、从服务器(web services)端更新Windows® Phone应用程序。 在这一部分中,一个移动应用...

    push(实现消息推送)

    - 节能性:推送机制应尽可能减少电量消耗,例如在无网络或低电量时暂停推送。 - 可靠性:处理消息丢失或重复推送的问题,设计合理的消息确认机制。 - 用户体验:优化通知的展示,避免过多的通知打扰用户。 综上所述...

    基于Netty的面向移动终端的推送服务设计

    2. **Android的C2DM机制**:C2DM(Cloud to Device Messaging)是Android官方提供的消息推送机制,但存在覆盖率低的问题,这促使开发者寻找替代方案。 3. **Netty框架**:Netty是一个高性能、异步事件驱动的网络...

    消息推送代码示例

    常见的消息推送机制有两种:基于HTTP长轮询和基于WebSocket的双向通信。HTTP长轮询是客户端持续向服务器发送请求,直到服务器有新消息时才返回,而WebSocket则建立一个持久连接,允许服务器和客户端双向交换数据。 ...

    基于SuperSocket的消息推送详细说明文档1

    - GA.SuperSocket.MobileApp:模拟移动手机端,可以多次打开以发送消息至服务器,然后由服务器转发给特定的桌面客户端。 功能特点: - 客户端间的消息传递。 - 服务器向客户端推送消息。 - 离线消息存储到...

    MQTT方案消息推送安卓手机端+php服务端案例

    二、安卓手机端实现MQTT消息推送 1. 使用开源库:Android设备上常见的MQTT客户端库有Paho MQTT Android Service和Mosquitto等。 2. 连接MQTT服务器:配置连接参数,如服务器地址、端口、用户名、密码、客户端ID等。 ...

    Android推送源码

    3. 消息推送:推送服务提供商接收到消息后,根据设备状态(如在线、离线)决定消息的传递方式,对于在线设备直接推送到手机,离线设备则存储消息待设备上线后发送。 4. 应用接收:Android应用接收到推送消息后,可以...

    极光推送消息介绍Demo

    极光推送(JPush)是阿里巴巴旗下的一款高效、稳定的移动端消息推送服务,广泛应用于移动应用开发者,用于实现向用户终端发送各种消息、通知。在这个“极光推送消息介绍Demo”中,我们将深入探讨如何利用极光推送...

    websocket 与手机端推送消息.rar

    3. **websocket 与手机端推送消息.txt**:这是一个文本文件,可能详细描述了WebSocket推送消息的实现流程,包括如何配置WebSocket服务,如何在后台创建定时任务,以及如何将数据库数据转化为可推送的格式。...

    基于Mina的Android消息推送系统的研究与实现.pdf

    为了解决这个问题,基于Mina的Android消息推送系统采用了一种主动推送机制,即服务器主动将消息发送到客户端,而不是等待客户端发起请求。这种方式显著减少了不必要的网络通信,降低了功耗,同时确保了消息的及时性...

    mqtt客户端发布与推送消息

    1. **订阅机制**:推送消息的基础是订阅。客户端通过向Broker发送`SUBSCRIBE`报文来订阅主题,指定感兴趣的主题和QoS级别。 2. **消息传递**:当有其他客户端发布消息到已订阅的主题时,Broker会根据QoS级别将消息推...

    android推送解决方案

    推送功能是在移动互联网时代中的一种常见的技术,主要应用于各类移动应用程序中,以便实时地将服务器端的最新信息推送到客户端。 1. 推送方式基础知识 推送功能最早是被用于 Email 中,用来提示我们新的信息。随着...

    腾云推(TPush)平台

    尤其是在Android平台上,由于其本身并没有内置的消息推送机制,开发人员往往需要借助第三方服务或自行开发基于特定协议(如XMPP)的推送系统,这不仅增加了开发难度,也消耗了大量的时间和资源。 在此背景下,腾云...

    Android DevCamp幻灯片分享:Android消息推送实现 | 友盟 徐仙明

    1. **理解消息推送**:定义消息推送的基本概念,如消息的构成与推送机制。 2. **Google Cloud Messaging (GCM)**:详细介绍Google官方提供的消息推送服务,包括其发展历程、架构原理及使用流程。 3. **C2DM与GCM对比...

    ios手机端集成mqtt接受服务器推送消息源码

    以下是对标题“ios手机端集成mqtt接受服务器推送消息源码”以及描述中涉及知识点的详细说明: 1. **MQTT协议**:MQTT是一种轻量级的消息协议,设计思想是开放、简单、小巧,主要用于物联网(IoT)设备,特别是资源...

Global site tag (gtag.js) - Google Analytics