IOS推送详解(一)------APNs

最近项目需要做IOS推送,在网上了解了下苹果的推送过程以及接口协议。
博文会分几部分来写,先介绍下APNs,然后介绍协议(新的旧的都说下),然后介绍生成证书,最后上代码。
APNS
IOS推送要比安卓推送简单的多,至少它不用咱们自己维护那些连接,IOS推送就是和APNs服务器通信。
每台ios设备的每个app都有唯一的一个设备token,IOS端开发的同学很容易拿到这个token,然后需要将这个token上报到我们的服务器。
我们的推送服务器,也就是Provider,需要和APNs建立连接,告诉它我要向哪个设备的哪个app推送什么消息,就可以了,剩下的推送任务全部由APNs来完成。
原文地址:
https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html#//apple_ref/doc/uid/TP40008194-CH8-SW1
在这里献丑试着翻译下。

苹果推送通知服务(APNs)是远程通知功能的核心。它是一个健壮的,安全的,高效的服务,app开发者可以用它给iOS(间接watchOS), tvOS, 和 macOS等设备推送消息。
在用户设备上,当你的app启动时app会和APNs建立一条认证的,加密的,持久的连接,这条连接允许你的app开始接受推送,正如这里所说的一样Configuring Remote Notification Support
还有一个连接是用来发消息的—–你的推送服务器(provider)和APNs之间的持久的,安全的连接—–需要配置你在网上的开发者帐户以及苹果提供的加密证书。provider是一个服务,可以配置和管理你和APNs间的工作。图6-1显示推送一个远程消息的路径。
图6-1
当这两个连接都建立完成后,你的provider就可以推消息给APNs了,APNs把你的消息正确的传递给每个目标设备,设备收到消息(payload)后,系统将消息传递给指定的app,然后管理用户的交互。
当消息过来时,app并没运行时,系统仍然会显示这个消息。如果APNs推消息的时候这个设备没电了,APNs会缓存这个消息并且持续重推一段时间,详细请见Quality of Service, Store-and-Forward, and Coalesced Notifications

Provider的职责
你的Provider服务在和APNs交互中有以下职责

  • 接收,设备的token,以及其它相关的从设备上报上来的信息,这有助于你了解你app的情况。
  • 做决定,根据你的推送需求,消息应该在什么时候推送到指定设备上。
  • 构造请求并且发送给APNs,每个请求包含通知的载荷(payload)及传递信息,APNs则以你的名义推送消息到指定的设备。

每个推送必须满足

用多个Provider
图6-2描述多台Provider和APNs通信的过程,每个Provider都要和APNs建立连接,每个Provider都可以推送消息(注:这么做是为了推送效率)

服务质量、存储和转发,合并推送
APNs有个QoS组件来完成存储与转发功能,如果APNs推消息的时候,那个设备不在线,APNs会存储这个消息一段时间,当设备在线的时候再推过去。这个组件仅存储每个设备和每个应用程序的最新通知,如果设备处于脱机状态,则发送针对该设备的通知,导致先前的通知被丢弃。如果一个设备保持脱机状态很长一段时间,所有储存在APNs的通知都会被丢弃。
如果想合并相似的推送,你可以在推送消息中增加collapse 标识符。通常,你推送给APNs的每个推送都会在设备上弹出一个通知。然而,当http/2请求头中apns-collapse-id字段出现时,APNs会合并这个字段相同的推送。例如,一个新闻服务推了两次推送,有着相同的collapse标识符,APNs会合并这两个推送,然后给设备推一个消息。详见Table 8-2

安全的体系机构
APNs强制端对端加密认证,有两个级别的信任认证,链接信任以及设备token信任

如果本文对你有帮助,请随意打赏,我们会继续努力的
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qiaodoutec/article/details/72832017