OC学习69:远程推送APNs
什么是远程推送通知
- 从远程服务器推送给客户端的通知,需要连接网络
- 远程推送服务,又称 APNs(Apple Push Notification Server,即苹果推送通知服务)
APNs
- 只要手机联网了,不管App打开还是关闭都能接收到苹果服务器推送的通知
- 锁屏苹果设备在联网状态下都会与苹果服务器建立长连接,连接是双向的,苹果设备可以向苹果服务器发送请求,苹果服务器也可以向苹果设备发送请求
远程通知的过程
举个例子,微信App:
首先每个联网并打开微信的App都与微信服务器有一个
长连接
,当微信A用户
向B用户
发送一个消息时,微信A用户
先将消息
发送到微信服务器
然后微信服务器
判断微信B用户
是否与微信服务器建立了长连接,如果有直接通过微信B用户
与 微信服务器建立的连接管道直接发送即可,这样微信B用户
就能收到消息;如果微信
B用户
此时没有打开微信App
,那么微信服务器就将消息发送给苹果服务器
,苹果服务器再将消息发送到某台苹果设备上。苹果是如何知道该发送给哪台设备呢?用户A发送消息时需要将
用户B的 UDID 和微信App的 Bundle ID 附带在消息上
一块发送给 B用户,这些消息微信服务器又发送给苹果服务器,苹果服务器通过UDID
就知道发送给哪台设备了,然后通过Bundle ID
知道发送给哪个App发送了苹果根据
UDID+Bundle ID
生成一个deviceToken
,这样每天微信消息中都加上了deviceToken
苹果服务器就能识别设备和App了
获取 DeviceToken,并发送给 苹果服务器
- 注册远程通知
1 | - (void)remoteNotification{ |
- 联网:注册通知之后,苹果服务器会将 DeviceToken 通过代理方法的形式返回
这个代理方法会将 手机UDID + App的Bundle ID
发送给苹果服务器,苹果服务器进行某种编码之后再通过代理方法返回
1 | DeviceToken = (手机的UDID + App的Bundle ID) + 编码 |
返回的 DeviceToken
是一个 NSData
类型,大概格式如下:<7040f7d5 5a974598 c5cf31b5 3e340b39 68affd25 122f0ce1 3f315226 396c2e5b>
1 | - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ |
- Post title:OC学习69:远程推送APNs
- Post author:张建
- Create time:2023-08-12 14:09:31
- Post link:https://redefine.ohevan.com/2023/08/12/OC/OC学习69:远程推送APNs/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.