当我们开发需要与服务器交互的应用程序时,基本上都需要获取服务器端的数据。要获取服务器上不定时更新的信息,一般来说有两种方法:第一种是客户端使用pull(拉)的方式,隔一段时间就去服务器上获取一下信息,看是否有更新的信息出现;第二种就是服务器使用push(推送)的方式,当服务器端有更新,则将最新的信息push到客户端上,如此以来,客户端就能自动地接收到消息。
虽然pull和push两种方式都能实现获取服务器端数据更新的功能,但pull方式的弊端很明显:费流量、费电,需要我们的程序不停地去监测服务器端的更新。
首先可以来了解一下iOS和Android平台的推送机制:
iOS 系统的推送(APNS,即 Apple Push Notification Service)依托一个或几个系统常驻进程运作,是全局的(接管所有应用的消息推送),所以可看作是独立于应用之外,而且是设备和苹果服务器之间的通讯,而非应用的提供商服务器。比如腾讯 QQ 的服务器(Provider)会给苹果公司对应的服务器(APNs)发出通知,然后再中转传送到你的设备(Devices)之上。当你接收到通知,打开应用,才开始从腾讯服务器接收数据,跟你之前看到通知里内容一样,但却是经由两个不同的通道而来。
Android的推送有两种形式,一种是后台Service,一种是GCM
不过这里要指出的是,Android的这种形式和传统电脑还是有区别的,电脑的后台是保持程序进程在后台运行,而Android是在程序后台Service区域添加一个新的程序专门接收数据。
要说的话,Android的后台推送机制更加复杂,但是因为可操控部分更多,加上GCM是在2.X之后才加上的而且有可能在系统中并不存在,所以很多软件都是使用Service这种形式。
本质上,APNs 与 GCM 是类似的技术实现原理:即系统层有一个常驻的 TCP 长连接,一直保持的长连接,即使手机休眠的时候也在保持的长连接。这里对于大部分人来说,最不理解的就是,休眠时候都保持在那里的 TCP 长连接,不会耗电很厉害么?
答案是:不会。这是手机的设计来做到的。TCP长连接有个心跳的时间,在国外可以很长比如30分钟,在国内则因为网络环境复杂一般10分钟。客户端发起的心跳,会短暂地消耗手机电能,但在这个心跳间隔期间,则消耗电能是很少的。当在心跳期间服务器端有推送信息过来时,客户端可以收到并做处理。
这里有篇文章以 Android 为例做原理解释:
http://blog.jpush.cn/index.php/jpush_wireless_push_principle/
极光推送技术原理:无线网络长连接
再说 APNs 的设计成功处。
iOS 为了真正地为用户体验负责,不允许应用在后台活动。有了这个限制,但是对于终端设备,应用又是有必要“通知”到达用户的,随时与用户主动沟通起来的(典型的如聊天应用)。
这就是 APNs 的逻辑所在:iOS 自己做个长驻后台保持连接。所有应用,有必要(申请)并且被允许(用户可以改设置)的话,可以通过 APNs 中转到达用户。
Android 因为后台可以长驻,尤其是国内的 Android 的手机上 Google自家的推送服务 GCM 处于基本不可用的状态。所以,各App各显神通。聊天类应用的话,大多数直接借用 XMPP 规范里的一些成果。少量如微信有IM底子的,自己开发协议。这些在实现原理上与 APNs / GCM 没有本质的区别,但有一定的技术门槛。而大多数普遍应用,要使用推送的话,则使用轮询的方式简单实现。
其实,国外如 Urban Airship 自己实现了 Android 上的第三方提供的推送平台。国内如极光推送也实现了第三方的推送平台(技术与微信、GCM、APNs类似)。理论上,如果一个 Android 设备上多款应用都使用极光推送这种第三方推送平台的话,也可以如 APNs 一样达到节省电量、流量消耗的效果。
另可参考Android实现推送方式解决方案
http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378971.html
相关推荐
Android 消息推送解决方案 在 Android 开发中,消息推送是非常常见的应用场景,如电商的活动宣传、资讯类产品进行新闻推送等等。今天,我们将全面介绍 Android 中实现消息推送的 7 种主流解决方案。 一、前言 ...
接下来,我们将介绍几种具体的Android推送解决方案: A. C2DM(Cloud to Device Messaging):Google提供的服务,允许服务器向Android应用发送数据。然而,C2DM在国内的可用性受限,因为它依赖Google的服务器,而...
4. **Android推送实现**: - 使用开源库如libstreaming或SPydroid,它们提供了实现RTSP推流所需的组件和接口。 - 开发者需要配置推流参数,如服务器地址、端口、视频编码格式、分辨率等。 - 实现RTSP推送的关键...
在Android应用开发中,消息推送是一项至关重要的技术,它能够实时地将服务器端的信息传递到用户的设备上,增强用户体验并促进用户与应用的互动。郭霖老师的“见证Android消息推送时刻”课程,深入讲解了这一领域的...
XinGeDemo是信鸽提供的Android推送示例代码,其中包含了完整的集成和使用流程。通过阅读和运行这个示例,你可以快速了解如何在自己的应用中实现信鸽推送功能。主要文件可能包括MainActivity.java(用于展示推送消息...
下面我们将详细探讨Android消息推送的实现机制、常见方案以及离线消息的处理策略。 首先,Android消息推送通常依赖于云服务,如Google的Firebase Cloud Messaging (FCM,前身为GCM) 或自建的服务。FCM是Google提供...
然而,实现 Android 消息推送通知远比 iPhone 上的推送通知解决方案复杂。Google 提供了 C2DM(Cloud to Device Messaging)服务,但它存在一些问题,如仅适用于 Android 2.2 及以上系统,需要依赖于 Google 官方...
"Android 推送解决方案" Android 推送解决方案是指在 Android 平台上实现推送功能的各种方法和技术。推送功能是在移动互联网时代中的一种常见的技术,主要应用于各类移动应用程序中,以便实时地将服务器端的最新...
在探讨Android实现推送方式解决方案的过程中,我们聚焦于XMPP协议这一关键知识点,深入解析其在Android推送机制中的应用。XMPP(Extensible Messaging and Presence Protocol)作为一种基于XML的即时通讯协议,不仅...
基于XMPP协议的Android消息推送设计与实现 本文主要介绍了基于XMPP协议的...本文基于XMPP协议的Android消息推送设计与实现,提供了一种高效、可靠和安全的消息推送解决方案,能够满足不同行业和领域的消息推送需求。
总的来说,基于XMPP的Android消息推送提供了灵活、可扩展的实时通讯方案。开发者需要熟悉XMPP协议,选择合适的客户端和服务器库,并实现客户端与服务器之间的通信逻辑。通过这样的方式,可以构建出高效、可靠的推送...
在Android开发中,消息推送是一项重要的功能,它允许应用程序在用户未直接与应用交互时向用户提供实时信息。这种技术在各种类型的应用中广泛使用,如社交应用、新闻应用、购物应用等,用来提高用户粘性并及时传达...
【标题】"openfire+asmock实现android消息推送"揭示了如何在Android平台上利用Openfire服务器和Mocking框架AsMock来构建一个实时的消息推送系统。Openfire是一款开源的即时通讯服务器,它基于XMPP(Extensible ...
压缩包中的`tokudu-AndroidPushNotificationsDemo-ea18b09.zip`可能包含Tokudu的Android推送通知示例代码,这是一个第三方库,提供了更简单的方式来处理FCM推送。安装此库后,Android应用可以更容易地接收和处理...
总之,"NIO加线程池实现Android消息推送"是一个高效、可扩展的推送方案,利用了Java NIO的非阻塞特性以及线程池的并发处理能力,为Android应用提供了一种可靠的实时通信方式。通过持续优化和调整参数,可以进一步...
本资源“安卓消息推送通知栏相关-Android--第三方消息推送腾讯信鸽.rar”主要涉及的是如何利用腾讯信鸽这个第三方服务来实现Android应用的消息推送功能。下面我们将详细介绍腾讯信鸽的基本概念、工作原理以及如何在...
Android推送方案.ppt
在Android开发中,消息推送是一项重要的功能,它能让应用程序在后台与用户保持互动,即使应用没有在前台运行。本教程将通过一个详细注释、完整可运行的源码实例,来探讨如何在Android中实现消息推送。这个实例包含了...
此外,Android原生的Cloud to Device Messaging (C2DM)服务,虽然已被Google的Firebase Cloud Messaging (FCM)取代,但对理解Android推送机制仍有一定参考价值。C2DM是Google为开发者提供的从服务器向Android应用...