这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
iOS 推送与 APNs
第一个真正的问题
入职第二周,老王找到我:「iOS 用户投诉说收不到推送,特别是晚上发的消息。」
我查了一下推送日志,全是 Invalid token。可能是用户卸载了 App,或者 token 过期了。
我们用的极光推送统一封装了 iOS 和安卓,但这也意味着:我们无法直接控制推送参数,失败时只能看到极光返回的错误,看不到真正的原因。
APNs 的工作流程
Apple Push Notification service(APNs)是苹果官方的推送服务,所有 iOS App 的推送都必须经过它。
1. App 在用户设备上注册推送
2. APNs 返回一个 device token
3. App 把 token 发给我们的服务器
4. 我们的服务器用 token 通过 APNs 发送推送
关键概念:Device Token
Device token 是 APNs 分配给每个设备的唯一标识。它不是设备 ID,也不是用户 ID,而是 APNs 内部使用的标识。
Device token 可能变化:
- 用户卸载重装 App
- 用户恢复设备
- 用户升级系统
- Apple 定期更新 token
所以需要定期更新 token,并在推送失败时检测 token 是否失效。
Token 失效处理
当前表结构没有处理 token 失效的问题——同一个用户可能有多台设备,失效的 token 一直在被使用。
APNs 的反馈服务
APNs 提供反馈服务(Feedback Service),会告诉我们哪些 token 已失效。我写脚本定期查询失效 token,清理设备表。
部署后,失效 token 问题减少了 80%。
一句话
iOS 推送的核心是 APNs 与 token 管理:token 会变、会失效,要定期更新、用反馈服务清理。设备表是所有推送渠道的基础设施——下一节看安卓这个更复杂的世界。
发现内容有问题?
告诉我们哪里需要改进。
