[关闭]
@evolxb 2016-08-27T16:10:31.000000Z 字数 2341 阅读 1396

ios 推送通知(三)

ios, push notification


苹果的远程推送通知服务(APNs)是远程通知的核心。这是一个强健并且高效的系统来为iOSwatchOStvOS设备推送消息。每台设备都和APNs建立了一个加密的可信IP链接,通过这个持久的链接来接收APNs发送给设备的消息。如果通过这个链接发送到设备后,相应的应用不在前台运行,系统会展示相应的警告框提示用户。

你需要使用自己的服务器来为用户生成远程通知。这个服务器被称为Provider,它生成远程通知的数据并且决定什么时候推送这个远程通知。对于每个远程通知,Provider生成通知的payload然后使用HTTP/2的持久的加密链接发送到APNsAPNs负责把通知推送到用户设备。

远程通知的路径

APNs负责分发你的Provider传过来的通知到你的应用的用户的设备。当你的Provider需要推送一个通知,它把这个通知和设备的token一起发送到APNsAPNs会把这个通知传递到用户设备,设备上的操作系统会负责传递这个通知到相应的应用程序。如下图:

你传给服务器的设备token和手机号是类似的。它包含设备的信息,APNs使用这个token能定位你的应用程序安装的设备。APNs也会用它来验证通知发送的过程中的路由信息。通过注册远程通知服务,系统会发送设备的token给你的应用程序。

通知的payload是你想发送给设备的数据,它是一个JSON字典。payload包含系统提示用户的方式,如警告框,badge,声音。它也能包括你自定义的数据。

下图展示了APNs在设备和Provider之间的虚拟网络。在APNs的两边--设备方和APNsProvider方和APNs之间--都会有多个连接。在ProviderAPNs的这边,它们被称为网关。通常都会有多个Provider,每个Provier都通过网关和APNs建立一个或多个持久的加密连接。这些Provider通过APNs发送通知到它们的客户端设备上。

推送服务质量

APNs默认包含一个存储和转发功能的组件。如果要推送的设备不在线,要推送的通知会被APNs暂存一段时间,当设备上线之后会推送到设备。但是只有一个通知会被暂存。当有多个通知推送到设备而设备此时不在线时,最新的一个通知会被暂存,而以前的通知会被丢弃。这被称为通知合并。

如果设备长时间离线,那么所有的通知都会被丢弃。

安全架构

为了保证安全的通信,APNs使用两种不同的信任级别在Porvider和设备之间:connection trusttoken trust

Connection trust保障APNs是连接到一个被授权可以推送通知的Provider上。APNs也会使用connection trust来连接到设备以保证设备的合法性。APNs到设备的可信连接是APNs自动处理的,但是ProviderAPNs之间的可信连接必须要你自己负责。

Token trust确保通知是在合法的起始点和终止点之间传送。Token trust涉及到设备token的使用,这是分配给特定设备上的特定应用的标识符。每个应用通过注册远程通知服务来获取它的唯一设备标识符,而且必须要把这个标识符传到服务器。因此,这个标识符应该和通知一同被Provider发送到APNs。提供这个标识符用于传递通知到特定的设备上的特定应用程序。

注意:设备标识符并不能用来区分设备的唯一性。

APNs也会使用必要的证书,CA证书和密钥(公钥和私钥)来验证Provider和设备之间的连接。

ProviderAPNs之间的可信连接

每个Provider都必须要有一个唯一的证书和私钥,APNs会使用它们来验证它和Provider之间的连接。Provider的证书标示它所支持的应用的bundle id

你的Provider通过TLS的对等网络建立可信连接到APNs。当TLS连接初始化后,你会得到APNs的服务端证书,然后在你这边验证证书。然后你发送你的Provider证书给APNsAPNs也会在它那边验证你的证书。当这个过程完成后,一个安全和可信的TLS就被合法的Provider建立了。

APNs到设备的可信连接

每个设备都有一个设备证书和私钥。它们用来验证和APNs之间的连接。设备在激活的时候会获取这个证书和私钥然后把它们保存在钥匙串中。

你不需要做任何事来建立APNs和设备之间的可信连接。APNs会通过TLS来建立到设备的可信连接。在这种情况下,设备初始化TLS连接,APNs返回服务器证书.设备验证这个证书然后发送自己的设备证书给APNs,APNs验证这个证书。

Token的生成和发送

设备想要收到远程通知必须先在系统中注册远程通知服务。当系统收到应用的注册请求时会把这个请求转发到APNsAPNs会使用设备的证书中的信息为应用生成一个唯一的设备token,然后加密这个token再把它返回给设备。系统通过NSData把设备token传递给应用。当收到这个设备token后,应用应该使用二进制或者十六进制把这个token发送给你的服务器。服务器不能把通知推送到没用这个token的设备。流程如下图:

APNs的设备token长度是可变的。不要写死长度。

下图显示设备token的生成和转发路径,还有上传到Provider的部分。

Token Trust (Notification)

每个从Provider发送给APNs的远程通知都必须和device token一起发送。APNs使用它的token key解密通知中的token来确保Provider的合法性。然后使用device token中的device ID来决定推送的目标设备,最后把这个通知推送给目标设备。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注