iOS推送过程详解

闲得无聊集成了一下信鸽推送,首先信鸽推送的文档里面有很详细的关于生成推送证书的教程,以后再要生成证书记不住过程的看它就可以了。即使你不用第三方,证书生成的过程是一样的。推送证书生成详细过程

注:需要强调一点的是,我在生成开发证书和发布证书的过程中犯了一个错误,由于两个成证书都需要生成cerSigningRequest(CSR)文件,因此我的发布和开发证书都使用了同一个,于是就怎么着都推送不成功,重新生成了CSR文件再次制作证书就成功了。

证书的作用

为什么要生成这些证书呢?为了支持APNs中的安全模型,服务端和设备必须具有某些证书,CA证书或者是token.

服务端:每一个服务端需要一个唯一的服务端证书和私有的秘钥来验证他们与APNs之间的连接。这个证书,是由苹果提供的,它必须能够鉴别出服务端发布的特定主题,这个特定的主题就是客户端应用的bundle ID.服务端发送给APNs的每一条通知,都带有能鉴别目标设备的设备号。服务端会希望使用APNs服务器提供的服务端证书来验证它正在连接的服务器。

设备:系统使用APNs传递给它的公共服务证书来认证它已经连接的服务器。它有一个唯一的私有的钥匙来向服务器认证自己并建立TLS连接。它在设备活动期间获取设备证书和钥匙并把他们存储在钥匙串中。系统也持有他的特有的设备号,这是他在与服务器的连接过程中获取的。每一个已经注册的客户端应用都有责任向他的服务端传递这个设备号。

APNs:APNs也有必要的证书,CA证书,秘钥(公有的和私有的)来验证连接和服务端与设备的身份。

APNs是如何发挥作用的

APNs服务传输并发送一个来自特定服务器的远程通知给一台特定的设备。通知就是一个简短的信息,这条信息包含两块主要的数据:设备token和有效载荷。设备号类似于电话号码,它包含了能够促使APNs定位到安装了客户端应用的设备。APNs 还使用它来认证一个通知的发送。payload就是一个JSON格式的属性列表,它详细描述了某台设备上的应用的使用者将被如何被通知。

远程通知的数据通过一个方向流入。服务端合成一个通知包,这个包包含了客服端应用的设备号和payload。服务端发送通知给APNs而APNs转而把通知发送给设备。当服务端向APNs认证时,它发送他的主题给APNs服务器,APNs据此识别它即将提供数据的应用。现在的主题指的就是目标应用的bundle identifier.

APNS的存在,使得只有特定的服务端才能给特定的app发送通知。他就是一个中间媒介,面向服务端和设备都有多点连接。服务端方面,被称为网关。每一个服务端都通过网关和APNs建立一个或者多个持续安全的连接。并且这些服务端通过APNs向众多安装了他们的客户端应用的设备发送通知。

APNS也不会跟任意的服务端建立连接,APNs的连接是和苹果已经同意发送通知的已授权的服务端的。这就叫做APNs的连接信任。同时,在设备连接方面,APNs也必须验证连接是和一台合法的设备之间建立的。

下面介绍APNs与服务器以及设备建立连接的具体过程以及token的产生。

连接过程与Token的产生

APNs与设备连接验证

APNs通过TLS点对点的认证确定一台连接设备的身份。(注意系统负责该阶段的连接信任,你本身不需要做任何事情。)在这个过程期间,一台设备初始化了与APNs之间的TLS连接,APNs返回它的服务证书。设备验证这份证书并且给APNs发送它的设备证书,APNs验证它发送过来的证书。

服务器与APNs连接验证

服务端和APNs之间的连接信任也是通过TLS点到点的认证来建立的。这个过程就类似于APNs和设备之间的连接信任。服务端初始化一个TLS连接,从APNs获取服务证书,并且验证这个证书。然后服务端把它的证书发送给APNs,APNs验证这个证书。一旦这个过程完成,一个安全的TLS连接就被建立起来了。APNs就会知道现在的连接是与一个合法的服务器建立的。

注意服务端连接只对一个特定的app的传输是合法的,这个app是根据证书中指定的bundle ID来确定的。APNs也建立了一套证书废止列表。如果一个服务端证书在他的列表上,APNs可能会吊销服务端的信任(也就是说,拒绝连接)。

Token的产生过程

应用必须注册才能收到远程推送。通常只要在手机上安装一个应用,它便会提示你是否允许应用给你发送通知,如果你允许了这个操作,应用就会发出一个注册请求。系统接收来自应用的注册请求,与APNs建立连接,并转发这个请求给APNs。APNs使用具有唯一性的设备证书中的信息产生设备编号。设备号中包含设备的标识。然后它使用一个token key将设备号加密并返回给设备(token)。第一次安装注册推送成功之后,你就能通过下面的方法收到来自APNs返回的deviceToken。

- (void)application:(UIApplication )application didRegisterForRemoteNotificationsWithDeviceToken:(NSData )deviceToken

-

设备将设备号以NSData格式返回给请求token的应用。然后应用必须以二进制或者十六进制的格式将设备号传输给他的服务器。这个阶段token信任建立的方式保证了只有APNs可以产生设备号,而这将非常有意义。它可以保证,一台设备传递给他的设备号就是他之前提供给那台设备的,并且是那台设备唯一的token。

一条推送通知发送的完整过程

1.设备第一次安装应用时,由上述“token的产生过程”产生token并与服务器共享token。

2.服务器向APNs请求连接,APNs验证服务器是否是苹果已授权服务器,验证过程为上述“服务器与APNs连接验证”过程,验证通过一个安全的TLS连接就建立起来了。服务器向APNs发送通知内容(payload)同时还有deviceToken。

3.APNs接收到deviceToken并解密,根据token中包含的设备ID找到目标设备。

4.目标设备向APNs初始化一条TLS连接,APNs发送给设备自己的服务证书,设备验证通过后,发送自己的设备证书以及deviceToken给APNs,APNs将deviceToken解密并对比设备证书中的设备ID是否一致,验证通过,APNs就会将推送内容发送给目标设备。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-07 06:44:59

iOS推送过程详解的相关文章

推送原理解析 极光推送使用详解

推送原理解析 极光推送使用详解 原军锋 12016.09.22 18:10:07字数 5,705阅读 19,494 推送技术产生场景: --服务器端主动性: 客户端与服务器交互都是客户端主动的, 服务器一般不能主动与客户端进行数据交互, 因为服务器端无法得知客户端的 IP 地址 及 状态; --数据实时性: 如果服务器端有紧急数据要传递给客户端, 就必须主动向客户端发送数据; --基本原理: 使客户端实时获取服务器端消息, Pull 方式, 小周期轮询, 费电费流量; 另一个就是 Push 方式

使用【百度云推送】第三方SDK实现推送功能详解

之前介绍过如何使用shareSDK实现新浪微博分享功能,今天介绍如何使用百度云推送SDK实现Android手机后台推送功能. 运行效果如下 第一步,如果使用百度的SDK,当然要先成为百度的开发者啦,这个就不详述了.成为开发者之后,我们要建立一个应用,如下图所示 第二步,创建好应用之后,我们点击开方者服务管理,进入工程管理页面,然后点击左侧云推送,进入云推送功能页面,具体如下图 进入云推送详细页面之后,我们点击推送设置,设置好我们的应用的包名,然后点击快速实例,将系统给我们产生的示例代码下载下来

iOS 远程推送通知 详解

1: ios本地通知和远程通知 http://wangjun.easymorse.com/?p=1482 2: 苹果远程通知服务申请激活例图 (外国佬写的.) http://mobiforge.com/developing/story/programming-apple-push-notification-services 3:书籍参考:iPhone 开发秘籍 第16章 推送通知. 好了,进入正文: 首先是申请证书的网址 https://developer.apple.com/ios/manag

【Android应用开发】 推送原理解析 极光推送使用详解 (零基础精通推送)

作者 : octopus_truth 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/45046283 推送技术产生场景 : -- 服务器端主动性 : 客户端与服务器交互都是客户端主动的, 服务器一般不能主动与客户端进行数据交互, 因为服务器端无法得知客户端的 IP 地址 及 状态; -- 数据实时性 : 如果服务器端有紧急数据要传递给客户端, 就必须主动向客户端发送数据; -- 基本原理 : 使客户端实时获取服务器端消息,

Java Dwr3实现消息推送步骤详解

DWR包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJAX原则的Servlet中获取数据.另外一方面一个JavaScript库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容,DWR采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码.这样WEB开发人员就可以在JavaScript里使用Java代码,就像它们是浏览器的本地代码(客户端代码)一样:但是Java代码运行在WEB服务器端而且可以自由访问WEB 服务器的资源.出于安全的理

理论经典:TCP协议的3次握手与4次挥手过程详解

1.前言 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务.TCP提供一种面向连接的.可靠的字节流服务. 面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接.这一过程与打电话很相似,先拨号振铃,等待对方摘机说"喂",然后才说明是谁. 本文将分别讲解经典的TCP协议建立连接(所谓的"3次握手")和断开连接(所谓的"4次挥手")的过程.有关TCP协议的权威

Android签名机制之---签名过程详解

一.前言 又是过了好长时间,没写文章的双手都有点难受了.今天是圣诞节,还是得上班.因为前几天有一个之前的同事,在申请微信SDK的时候,遇到签名的问题,问了我一下,结果把我难倒了..我说Android中的签名大家都会熟悉的,就是为了安全,不让别人修改你的apk,但是我们真正的有了解多少呢?所以准备两篇文章好好介绍一下Android中签名机制. 在说道Android签名之前,我们需要了解的几个知识点 1.数据摘要(数据指纹).签名文件,证书文件 2.jarsign工具签名和signapk工具签名 3

iOS 推送证书制作(JAVA/PHP)

iOS 推送证书制作(JAVA/PHP) 在使用Java或者PHP制作iOS推送服务器的时候,需要自己从开发者网站上导出的aps_developer_identity证书和Apple Development Push Services证书进行合成,生成可以供Java使用的p12证书或供PHP使用的pem证书.aps_developer_identity证书和Apple Development Push Services证书的申请过程可以参考:http://www.cnblogs.com/hubj

iOS学习--UIScrollView 原理详解

iOS学习--UIScrollView 原理详解 http://blog.csdn.net/yanfangjin/article/details/7898189 ScrollView UIScrollView UIScrollView为了显示多于一个屏幕的内容或者超过你能放在内存中的内容. Scroll View为你处理缩小放大手势,UIScrollView实现了这些手势,并且替你处理对于它们的探测和回应.其中需要注意的子类是UITableView以及UITextView(用来显示大量的文字).