每个 iOS 推送通知集成都始于同一个关卡:向 Apple 推送通知服务证明您有权向您应用的用户的发送消息。Apple 提供了两种方式来实现这一点——APNs 身份验证密钥(.p8)或 APNs 证书(.p12)——它们之间的区别在于,一种凭证只需配置一次,而另一种则需要每年续订,而且往往是在最不方便的时候。
本指南将解释 APNs 身份验证的实际工作原理、何时使用 .p8 密钥与 .p12 证书,以及导致此问题出错的少数几种错误。
APNs 身份验证的工作原理
当您的推送提供商(PushEngage 或您自己的服务器)发送通知时,它会连接到 Apple 的 APNs 提供商 API,并必须证明两件事:它有权代表您发送通知,并且它允许定位您应用的 bundle ID(在 APNs 术语中称为“主题”)。.p8 密钥和 .p12 证书只是证明这两点的两种不同方式。
设备端是分开的。您的应用会向 APNs 注册并接收一个设备令牌——这部分无论您的提供商使用哪种凭证都不会改变。身份验证纯粹是服务器与 Apple 之间的事务,这就是为什么您可以在不修改应用二进制文件的情况下切换方法。
.p8 身份验证密钥(使用此项)
.p8 是一种令牌签名密钥。您的提供商使用它来生成短期有效的 JSON Web 令牌,以验证与 APNs 的每次连接。它的特性使其成为几乎所有人的默认选择:
- 永不过期。无需每年续订,也不会在某个被遗忘的日期导致推送中断。
- 一个密钥涵盖您开发者账户中的所有应用。发布第二个应用时,同一个密钥也能对其进行身份验证。
- 可用于开发和生产环境——无需沙盒/生产证书对。
- 包含三个值:.p8 文件本身、10 位密钥 ID 和您的团队 ID。
创建之前需要了解两件事。Apple 限制您每个账户只能拥有两个有效的 APNs 密钥,因此大型组织应将密钥创建视为一项慎重行为,而不是按项目习惯进行。并且 .p8 文件在创建时只能下载一次——将其存储在团队可以找到的地方,因为 Apple 不会再次提供给您。
.p12 证书(旧版路径)
.p12 是一种 TLS 客户端证书,在 Apple 发行后从 Keychain Access 导出。它用于验证连接本身,而不是签名令牌。它仍然有效,并且某些企业安全策略仍要求使用它,但其限制是 Apple 将新集成引导至密钥的原因:
- 每年都会过期。 导致推送突然完全失败的最常见原因是 APNs 证书已悄然失效。
- 它仅限于单个应用。 每个 bundle ID 都需要自己的证书,每个证书都需要自己的续订日历。
- 它需要 Mac。 签名请求和钥匙串导出流程无法仅通过浏览器完成。
您应该使用哪种?
| .p8 身份验证密钥 | .p12 证书 | |
|---|---|---|
| 过期时间 | 从不 | 每 12 个月 |
| 范围 | 账户中的所有应用 | 一个 bundle ID |
| 环境 | 开发 + 生产 | 每个证书单独或合并 |
| 创建自 | 任何浏览器 | 带有钥匙串访问的 Mac |
| 账户限制 | 2 个活动密钥 | 每个应用对 |
| 使用场景 | 几乎总是 | 政策要求证书 |
诚实的答案是:除非安全策略强制要求证书路径,否则请使用 .p8 密钥。移动部件更少,无需续订,您的整个产品组合只需一个凭证。
三分钟创建 .p8 密钥
- 在您的 Apple Developer 账户中,转到 **证书、标识符和配置文件 → 密钥** 并注册一个新密钥。
- 为其命名,启用 **Apple Push Notifications service (APNs)** 复选框,然后继续。
- 下载 .p8 文件(请记住:只有一次机会),并记下确认屏幕上显示的 **密钥 ID** 以及账户成员资格页面上的 **团队 ID**。
- 将这三个值全部上传到您的推送提供商。在 PushEngage 中,这在您的应用设置中是一个屏幕 — APNs 凭证指南 提供了带有屏幕截图的详细说明。
这些错误解释了
令人惊讶的是,许多“推送已损坏”的工单实际上是伪装的凭证问题。常见的嫌疑犯包括:
- BadDeviceToken — 您将沙盒构建的应用的令牌发送到了生产环境,反之亦然。Xcode 的调试构建与沙盒通信;TestFlight 和 App Store 构建与生产环境通信。
- TopicDisallowed — 凭证不包含您要定位的捆绑 ID。通常是单个应用的 .p12 证书和复制粘贴的配置。
- Sudden 100% delivery failure — .p12 过期。在检查其他任何内容之前,请先检查证书的到期日期。
- InvalidProviderToken — 密钥 .p8 被吊销,或者与有效文件配对的 Key ID/Team ID 错误。
它在您的集成中的位置
APNs 凭证是唯一设置会话的第一步。将 .p8 上传到 PushEngage 一次,之后所有下游 — iOS SDK 1.0 集成、通过通知扩展发送的富媒体、触发的广告系列以及推送本身 — 都将无需进一步操作即可运行。如果您是从 Firebase 过来的,您提供给 FCM 的相同密钥在这里也适用,这也是为什么从 iOS 上的 FCM 迁移只需一个下午的原因。
对于设置之后的策略层,请从应用推送营销指南开始。准备好发送时,完整的 iOS 设置指南将引导您在不到一小时的时间内完成从凭证到第一个广告系列的所有设置。