iOS远程推送通知流程主要涉及应用、APNs(Apple Push Notification Service)和第三方服务器的协作。以下是详细流程及关键步骤:

1. 应用注册推送权限
请求用户授权:应用启动时调用 `UNUserNotificationCenter.requestAuthorization` 请求用户允许推送通知。
注册远程通知:调用 `UIApplication.registerForRemoteNotifications`,系统自动与APNs通信。
用户响应:用户同意或拒绝权限(拒绝后需引导用户到系统设置中开启)。
2. 获取设备令牌(Device Token)
成功注册:系统返回设备令牌(Device Token)到 `AppDelegate` 的 `didRegisterForRemoteNotificationsWithDeviceToken` 方法。
swift
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let tokenString = deviceToken.map { String(format: "%02.2hhx", $0) }.joined
print("Device Token: (tokenString)")
// 上传Token到服务器
失败处理:若注册失败,触发 `didFailToRegisterForRemoteNotificationsWithError` 方法。
Token特性:每个设备、每个应用唯一,更换设备或重装应用会更新。
3. 服务器发送推送通知
存储设备Token:应用将Token发送到第三方服务器保存,用于后续推送。
构建推送请求:
APNs接口:使用HTTP/2 API(推荐)或遗留二进制协议。
认证方式:基于Token的JWT(需生成.p8密钥)或证书(.p12文件)。
推送内容:JSON格式的Payload,包含 `aps` 字典及自定义数据。
json
aps": {
alert": {
title": "新消息",
body": "您有一条未读消息
},
badge": 1,
sound": "default
},
custom_data": "example
发送请求:服务器向APNs发送HTTPS请求,头部包含设备Token、主题(Bundle ID)和优先级等。
4. APNs转发到设备
验证合法性:APNs校验证书/Token、设备Token有效性及权限。
传递推送:若验证通过,APNs将推送发送到目标设备。
5. 设备处理推送
应用状态处理:
前台运行:默认不展示,可通过 `UNUserNotificationCenterDelegate` 的 `willPresent` 自定义行为。
后台/未启动:系统显示通知,点击后唤醒应用,传递Payload到 `didReceiveRemoteNotification`。
静默推送:添加 `content-available: 1`,触发后台任务(30秒限制)。
处理用户交互:通过 `userNotificationCenter(_:didReceive:withCompletionHandler:)` 处理点击事件。
6. 错误反馈与维护
APNs错误响应:服务器需处理HTTP状态码(如 `410` 表示Token失效,需移除)。
定期更新Token:设备Token可能因系统更新、恢复出厂设置等变化,需重新获取并同步到服务器。
关键注意事项
1. 证书配置:确保App ID启用推送,并配置开发/生产环境证书。
2. 测试工具:使用 `curl` 或工具(如[APNs Tester])测试推送。
3. Payload限制:最大4KB(iOS 8+),超限会导致推送丢弃。
4. 后台模式:需在Xcode中开启 `Remote notifications` 后台能力。
通过以上流程,iOS设备能够可靠接收并处理远程推送通知,开发者可根据需求扩展自定义逻辑(如数据更新、深度链接跳转等)。