什么是APNs

先说一下远程推送,一般我们有自己的服务器,在这个过程中是Provider的角色,如图,推送从我们的服务器到我们的APP的过程就是要通过APNs来发送

APNs(Apple Push Notification service)是远程推送功能的核心,通过APNs客户端和苹果服务器建立一个长连接,推送也是通过这个长连接发送到客户端上

deviceToken

deviceToken是设备的一个标识符,属于你这款APP装在你这个设备上的标识符,即每个APP在每一个不同的设备上都有着不同的deviceToekn,通过注册远程推送服务,APNs会返回给你的APP的deviceToken,如图

在项目的AppDelegate里面有一个方法,如果成功注册了便可以接收到deviceToken

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

deviceToken不是唯一确定的,当你的设备更新了系统然后deviceToken就会改变

安全架构

为了保证安全性,APNs用连接信任(connection trust)和token信任(token trust)来控制通信入口,你要用APNs则必须用通过这两种验证。

连接信任

连接信任第一个作用是保证APNs连接的provider是苹果已经同意可通信的,然后第二个是保证与APNs连接的设备的合法性,第二步是APNs处理的,你所要处理的是provider与APNs之间的连接安全性。

服务器与APNs之间的连接信任

每个服务器都必须要有唯一的provider证书和私钥,都是用来验证连接的。provider证书就是在开发者官网申请的。

服务器通过TLS验证和APNs连接,HTTPS中用的也是TLS协议,即四步握手,首先初始化TLS连接,即provider(服务器)发送请求给APNs,APNs服务器返回APNs证书(即公钥)给provider,然后服务端收到后生成provider证书后再返回给APNs,APNs收到后验证后即可以建立TLS连接,不过APNs用的不是HTTPS,而是HTTP/2,具体过程如下图

APNs与设备之间的连接信任

设备和provider一样,都有私钥和设备证书,当设备激活了就保存在钥匙串(keychain)中,但是这部分的连接信任你是不用管的,由APNs负责,也是通过TLS来验证,过程和provider和APNs相同

Token信任

Token信任就是保证通知从合法的起点推送到合法的终点,Token信任即要用到上面说的deviceToken,deviceToken提供给provider,然后之后你的provider每次发送要推送的通知都要携带deviceToken,这就是token信任

APNs会用token钥匙去保证通知来源(即你的服务器)的合法性,用包含在deviceTokenl里面的device ID去确定目标设备的身份,过程如下图

参考资料

图全部来自官方文档,很多关键词都是我自行翻译

苹果官方文档-Apple Push Notification Service

APNs原理解析的更多相关文章

  1. [原][Docker]特性与原理解析

    Docker特性与原理解析 文章假设你已经熟悉了Docker的基本命令和基本知识 首先看看Docker提供了哪些特性: 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上, ...

  2. 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现

    本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...

  3. Web APi之过滤器执行过程原理解析【二】(十一)

    前言 上一节我们详细讲解了过滤器的创建过程以及粗略的介绍了五种过滤器,用此五种过滤器对实现对执行Action方法各个时期的拦截非常重要.这一节我们简单将讲述在Action方法上.控制器上.全局上以及授 ...

  4. Web APi之过滤器创建过程原理解析【一】(十)

    前言 Web API的简单流程就是从请求到执行到Action并最终作出响应,但是在这个过程有一把[筛子],那就是过滤器Filter,在从请求到Action这整个流程中使用Filter来进行相应的处理从 ...

  5. GeoHash原理解析

    GeoHash 核心原理解析       引子 一提到索引,大家脑子里马上浮现出B树索引,因为大量的数据库(如MySQL.oracle.PostgreSQL等)都在使用B树.B树索引本质上是对索引字段 ...

  6. alibaba-dexposed 原理解析

    alibaba-dexposed 原理解析 使用参考地址: http://blog.csdn.net/qxs965266509/article/details/49821413 原理参考地址: htt ...

  7. 支付宝Andfix 原理解析

    支付宝Andfix 原理解析 使用参考地址: http://blog.csdn.net/qxs965266509/article/details/49802429 原理参考地址: http://blo ...

  8. JavaScript 模板引擎实现原理解析

    1.入门实例 首先我们来看一个简单模板: <script type="template" id="template"> <h2> < ...

  9. Request 接收参数乱码原理解析三:实例分析

    通过前面两篇<Request 接收参数乱码原理解析一:服务器端解码原理>和<Request 接收参数乱码原理解析二:浏览器端编码原理>,了解了服务器和浏览器编码解码的原理,接下 ...

随机推荐

  1. openStack openSource CloudComputing

    <一,> ,OpenStack a few Core Compontents integration with openStack-keystone Identity service1.1 ...

  2. Ordering Tasks(拓扑排序+dfs)

    Ordering Tasks John has n tasks to do. Unfortunately, the tasks are not independent and the executio ...

  3. angularJS使用$watch监控数据模型的变化

    使用$watch监控数据模型的变化 在scope 内置的全部函数中,用得最多的可能就是$watch 函数了.当你的数据模型中某一部分发生变化时,$watch 函数能够向你发出通知.你能够监控单个对象的 ...

  4. ubuntu 14.04设备flash媒体播放器

    今天是2014年4一个月19日本,就在两天前公布 ubuntu 14.04版本号, 以今天的优势是星期六,西安小雨,所以折腾linux. 我是个有点linux基础的小白.说是有些基础是由于以前在上大学 ...

  5. JavaScriptCore.framework基本用法(二)

    接着上节我们讲到的iOS调用js 下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用方法 首先我们看第一种,直接调用方法. 其中用到了iOS的bl ...

  6. 删除链表的中间节点和a/b处节点

    [说明]: 本文是左程云老师所著的<程序员面试代码指南>第二章中“删除链表的中间节点和a/b处节点”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解析说 ...

  7. Product(大数相乘)

    Description The problem is to multiply two integers X, Y. (0<=X,Y<10250) Input The input will ...

  8. BZOJ 1708: [Usaco2007 Oct]Money奶牛的硬币( dp )

    背包dp.. -------------------------------------------------------------------------------- #include< ...

  9. HTTP协议(超文本传输协议)

    一.HTTP的简介: 超文本传输协议. 它是基于TCP连接的(默认端口号是80).所以在传输数据前客户端需向服务器发送连接请求.当服务器同意连接请求,建立连接后才可以发送数据报文. 二.HTTP的报文 ...

  10. 发生了Post错误:错误代码40005,微信返回错误信息:invalid file type

    给客户部署 PxxCms, 使用群发功能发送图文的的时候提示: 发生了Post错误:错误代码40005,微信返回错误信息:invalid file type, 没学过php伤不起 ... Google ...