您的位置:首页 > 移动开发 > IOS开发

iOS系统推送的理解

2014-10-11 14:34 190 查看
iOS推送涉及到三个对象,分别是:device、provider和APNs(Apple Push Notification service),device就是我们的设备(iPhone, iPad之类)、provider就是我们自己维护的推送服务器,虽然APNs翻译出来是苹果推送服务,我这里就把它当做苹果一个负责推送的服务器。

我们的device和provider只与APNS通讯,APNs是provider和device沟通的媒介,它用来分发推送和验证推送实体的有效性。

Device与APNs

首先,Device第一次与APNS建立连接(这个第一次应该是相对于特定的bundle id而言的,因为不同的bundle id获取到的device token应该也不同吧,这个还不确定,可以验证一下),这个连接是TLS的安全连接,为此我们的设备中肯定存在一个certificate(unique device certificate),它在激活时获得并且保存在钥匙串中,开发文档里有一段话(It
obtains the device certificate and key during device activation and stores them in the keychain)。不过要清楚一点就是这个certificate中含有一个唯一标识这个设备的id,安全连接的建立过程就是APNs把自己的证书发送给device,device验证通过之后,device还把自己的证书发给APNs,APNs验证过后这个连接就建立起来了,此时APNs也得到了device的id,之后APNs要做的就是使用device
id生成device token,然后用一个token key加密这个device token,再传回给device,device得到了加密过的device token之后就回调给相应的app。

拿到token之后,程序每次启动也还要与APNs建立连接,这时的过程有一些不同,TLS连接建立成功后,系统要把这个token发给APNs,然后APNs使用他的token key解密这个token得到device id,然后跟device发给他的用于验证的certificate中的id作比较,相同的话证明这个token是自己生成的,然后把原来的token发回去。

那么Token就生成之后,App要将这个token发送给provider。

Provider与APNs

Provider和APNs之间的连接也是TLS安全连接,provider使用的certificate是从dev center 请求并下载的推送证书,这个证书里面包含了topic(我们app的bundle id),并且我们的provider的系统上也要保存Root CA用来验证APNs发过来的证书,TLS安全连接建立成功之后,APNs也得到Provider的topic也就是app的bundle id,也就是说这个APNs知道这个连接发送推送通知的应用程序是哪一个了。

下面就进入通知的内容了,当Provider要发送通知时,他可以组织一个数据结构,其中包含一些通知的内容,最主要的要包含token,然后他将这些东西按照苹果指定的规则发送给APNS,APNS得到这个数据包,拿到token,用他的key将token解密,得到device id,因为这条连接对应了某一个bundle id,所以此时APNS已经能够得到所有他要发送给的设备和设备上的应用的信息了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: