Android、iOS和Windows Phone中的推送技术

简介:  Android、iOS和Windows Phone中的推送技术    推送并不是什么新技术,这种技术在互联网时代就已经很流行了。只是随着进入移动互联网时代,推送技术显得更加重要。
 

推送并不是什么新技术,这种技术在互联网时代就已经很流行了。只是随着进入移动互联网时代,推送技术显得更加重要。因为在智能手机中,推送从某种程度上,可以取代使用多年的短信,而且与短信相比,还可以向用户展示更多的信息(如图像、表格、声音等)。

推送技术的实现通常会使用服务端向客户端推送消息的方式。也就是说客户端通过用户名、KeyID注册到服务端后,在服务端就可以将消息向所有活动的客户端发送。

实际上,在很多移动操作系统中,官方都为其提供了推送方案,例如,Google的云推送、IOSWindows Phone7/8也都提供了类似的推送方案。不过这些推送方案的服务器都在国外,有一些推送服务(如Google的云推送)在国内由于某些原因不太稳定,所以国内近几年涌现出了很多专门为国人打造的推送服务。

本文将从各种流行移动操作系统入手介绍推送技术的各种实现方式。当然,我们的主要目的是讨论Android的推送技术。

一、iOS的推送技术

AppleIOS提供了很完美的推送方案,其基本原理是Apple提供了自己的推送服务器,叫APNSApple Push Notification Service,苹果推送通知服务器)。而客户端设备(IPhoneIPad等)直接与APNS建立长连接。不过向客户端设备发送的消息并不是由APNS产生的,而是在需要发送消息的用户自己提供的服务器(称为Provider)中产生的,然后Provider将消息传送给APNS,最后由APNS将消息传送给客户端设备。也就是说,消息最开始由Provider产生,然后Provider将消息传送给APNS,最后再由APNS传送给客户端设备。消息传递的过程如图1所示。

图1

在发送消息到客户端设备接收到消息的过程中,始终伴随这一个令牌的传送(device token)。要想使用APNS提供消息服务,应用程序需要先向IOS注册需要提供的一个必要的信息就是与当前设备有关的device tokenIOS在接收到devicetoken后,会向APNS查询这个device token是否在APNS上注册了(所有的IOS设备在第一次使用时都需要向苹果服务器注册一个账号,否则无法从AppleStore下载应用,当然更无法使用推送服务了),如果已经注册,APNS会直接向应用程序返回这个devicetoken。应用程序获得这个devicetoken后,表示APNS已经允许向自己推送消息了,接着还需要将该device token发送给推送服务器(Provider)。到这里应用程序已经成功将自己注册到APNS中了。现在就可以通过Provider产生要推送的消息,然后Provider会将消息发送给APNS服务器,最后APNS服务器会直接向应用程序发送消息。这个过程比较复杂,不过看一下图2的描述就会对这一过程更加了解了。每一个流程描述前面的数字表示发送的时间先后顺序。

图2


二、Windows Phone的推送技术

微软为Window Phone提供的推送方案与IOS类似,也需要自己准备推送服务器(可以称为Cloud Service)。只是表示设备的ID变成了Uri。在Window Phone中有一个Push Client ServicePCS)。所有需要推送服务的应用程序都需要与Push Client Service通信。下面是Window Phone推送的基本步骤,读者可以与图3对照来看这一过程。

1:应用程序会向Push Client Service请求一个Push Notification URI)。

2:如果当前Window Phone设备已经在微软服务器注册了,Push Client Service会从MPNSMicrosoft Push Notification Service ,微软推送通知服务)获取Push Notification URI,并返回给应用程序,表示推送服务可用(②和③)。

3:应用程序需要将Push Notification URI发送给自己的推送服务器(Cloud Service)(④)。

第4步:如果需要推送消息,Cloud Service会将消息发送到MPNS,然后MPNS会将消息发送给Push Client Service,最后由Push Client Service将消息传送给应用程序(⑤、⑥和③)。


图3

三、Android的推送方案

Android的推送方案就比较多了,也比较乱。例如,有Google官方提供的C2DMAndroid Cloud to Device Messaging);第三方的推送服务(如极光推送);还有通过各种协议实现的推送服务端程序(如AndroidPN),用户通过这些服务端程序可以搭建自己的推送服务器。这些推送技术会在本节后面的部分详细介绍,本节先来介绍一下Android中经常使用的各种推送技术。当然,这些推送技术也能用于其它的移动设备,但由于Android的官方推送服务(C2DM)在国内使用上有一些问题,所以基于Android的第三方推送服务较其它系统多,因此这里主要针对Android来介绍。

通常推送技术会使用如下两种方式实现。

1. 轮询(Pull)方式

2. 持久连接方式(服务端Push方式)

轮询方式就是客户端以一定的时间间隔不断查询服务端是否有新的消息。这种方式必须自己实现与服务器之间的通信机制,例如消息队列等。而且还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池。所以大多数推送服务都不会使用轮询方式。

持久连接方式也就是Push方式,对于客户端来说,是一种被动的方式,而主动权在服务端,当有消息时,服务端会向所有注册到推送服务器的客户端推送消息。这种推送方式的好处是可以保证实时性,而且客户端实现简单。当然,也会有不足,例如,如果大量的客户端与服务端保持长连接时,会消耗服务器的资源。不过在未推送消息时,这些长连接就成了空闲连接,通常这种连接主要消耗的是内存资源。例如,200万用户可能会消耗数十GB的内存。因此搭建这种推送机制时要使用性能好的服务器。

持久连接的实现有很多方式,例如,可以使用XMPP作为通信协议。XMPP的主要优势是协议成熟、强大,可扩展性强。XMPP更多地用于IM系统中,后面要介绍的AndroidPN也是用了XMPP协议。

XMPP也有明显的缺点,例如,协议很复杂,如果吃透XMPP协议可能需要很长时间,还有就是由于XMPP是基于XML的,从而造成了数据冗余、这样会造成移动设备费流量、耗电等弊病。

除了XMPP,还可以使用MQTT协议,这种协议的主要优势是简洁、小巧、可扩展性强,从而带来了省流量、省电等优点,而且有C++版的服务端组件rsmb。缺点是协议不够成熟,而且实现较复杂,而且rsmb不开源,部署硬件的成本较高。

尽管C2DM服务在国内可能不太稳定或有一些地区不可用,但还是有必要介绍一下C2DM的原理。不过对于在国内使用的应用最好使用第三方的推送服务,或自己假设推送服务器。

C2DMIOSAPNS以及Window PhoneMPNS大同小异。还需要自己准备一台推送服务器,并通过如下步骤实现消息的推送。

1:移动设备上的C2DM服务需要与Google官方的C2DM服务器交互,验证当前设备是否在C2DM服务器上注册了,如果已经注册,C2DM服务器会返回一个注册ID给客户端的C2DM服务。(①和②)

2:客户端的C2DM服务会与自己的推送服务器交互,将账号和C2DM服务器返回的注册ID传给推送服务器。(③)

3:如果要推送消息,推送服务器会将注册ID和要推送的消息先发送到C2DM服务器,然后C2DM服务器会直接将消息推送给客户端(手机、平板电脑的设备)(④和⑤)。

读者可以对照图4来理解这3个步骤。

图4

除了使用官方的推送方案外,现在国内涌现出多个第三方的推送方案,例如,极光推送(JPush)、百度推送等。读者也可以用一下,这些同时通常是免费的(可能推送多媒体数据需要收费)。

相关文章
|
20天前
|
IDE 开发工具 Android开发
移动应用开发之旅:探索Android和iOS平台
在这篇文章中,我们将深入探讨移动应用开发的两个主要平台——Android和iOS。我们将了解它们的操作系统、开发环境和工具,并通过代码示例展示如何在这两个平台上创建一个简单的“Hello World”应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧,帮助你更好地理解和掌握移动应用开发。
44 17
|
20天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
23天前
|
人工智能 安全 物联网
Android与iOS:移动操作系统的双雄争霸
在智能手机市场中,Android和iOS作为两大主流操作系统,各自拥有庞大的用户群体和独特的生态系统。本文将深入探讨这两种系统的发展历程、技术特点、市场表现以及未来趋势,以期为读者提供全面而深入的了解。通过对比分析,我们可以发现,尽管Android和iOS在某些方面存在竞争关系,但它们也在相互借鉴中不断进步和完善。
|
20天前
|
安全 生物认证 Android开发
深入探索iOS与Android操作系统的安全性差异
本文旨在通过对比分析iOS和Android两大主流移动操作系统在安全性方面的差异,揭示它们各自的安全机制、面临的挑战以及用户如何提升自身设备的安全保护。通过对系统架构、应用审核机制、数据加密方式及隐私政策的深入探讨,本文为读者提供了一个全面了解两大平台安全性的视角,并提出了实用的安全建议。
|
24天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
20天前
|
开发工具 Android开发 iOS开发
Android与iOS生态差异深度剖析:技术架构、开发体验与市场影响####
本文旨在深入探讨Android与iOS两大移动操作系统在技术架构、开发环境及市场表现上的核心差异,为开发者和技术爱好者提供全面的视角。通过对比分析,揭示两者如何塑造了当今多样化的移动应用生态,并对未来发展趋势进行了展望。 ####
|
21天前
|
存储 数据安全/隐私保护 Android开发
Android与iOS的隐私保护机制对比####
本文深入探讨了Android与iOS两大移动操作系统在用户隐私保护方面的策略与技术实现,揭示了两者在设计理念、权限管理、数据加密等方面的差异及其对用户体验的影响。通过对比分析,旨在为用户提供更全面的隐私保护认知,同时为开发者提供跨平台隐私保护的参考。 ####
31 0
|
1月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
9天前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
92 66