iOS 推送证书配置 - p12
一. 引言
在做 iOS 开发的过程中,「推送通知」几乎是所有应用都会涉及到的功能。但刚开始接触的时候,很多同学会在证书配置这一步卡住。尤其是需要导出一个 p12 文件 提供给服务端,用来和 Apple 的 APNs 建立安全连接时,看起来步骤不少,实际操作起来却很容易迷糊。
事实上,整个流程并不复杂,只要理解清楚几个关键点:
- 需要先在 Apple Developer 上为 App 创建推送证书;
- 本地用钥匙串生成并导出 p12 文件;
- 将 p12 提供给服务端,就可以实现 iOS 推送。
本文会用完整的步骤带你从 0 开始配置 iOS 推送证书,并在每个关键环节配上截图,让你一步一步跟着做,不会再有“摸不到头脑”的困惑。
如果你是第一次接触推送配置,或者之前总觉得流程有点绕,那么这篇文章应该能帮你理顺思路。
二. 推送证书的基本概念
在正式开始操作之前,我们先来搞清楚推送证书(p12 文件)到底是什么、为什么需要它。
2.1 APNs 简介
APNs,全称 Apple Push Notification service,是 Apple 提供的推送服务。所有 iOS 设备接收推送消息,都是通过 APNs 来完成的。App 开发者不能直接把消息发给用户手机,而是要先把消息发给 APNs,再由 APNs 转发给目标设备。
2.2 为什么需要证书
为了保证安全,APNs 需要验证“谁在给我发消息”。推送证书就是用来完成这个身份验证的。它相当于一张“通行证”,证明你的服务端确实有权限给某个 App 发推送。
2.3 开发环境 vs 生产环境
- 开发证书(Sandbox):在 Xcode 调试、测试 App 时使用。
- 生产证书(Production):App 上架 App Store 后,用户收到的推送都走生产环境。
很多新手常见的坑就是:开发环境推送正常,但上架后就收不到,原因往往是证书用错了。
2.4 文件类型
在配置过程中,你可能会遇到几个常见的文件:
- .cer:苹果颁发的推送证书,下载后需要导入到钥匙串。
- .p12:从钥匙串导出的文件,包含证书和私钥,通常交给服务端使用。
- .mobileprovision:描述文件,用于 App 真机调试或上架(自动管理证书可以忽略)。
在这篇文章里,我们的重点是从 .cer 最终生成 .p12,也就是服务端最需要的文件。
三. 准备工作
在配置推送证书之前,有一些前提条件需要确认好,否则中途很容易卡住:
3.1 Apple Developer 账号
- 你需要一个付费的 Apple Developer 账号(99 美元/年)。
- 如果没有账号,可以在 Apple Developer 官网 注册。
- 注意:个人账号和公司账号都可以,区别在于公司账号需要 D-U-N-S 编号。
3.2 创建 App ID
- 登录 Apple Developer 后,在 Certificates, Identifiers & Profiles 里先创建一个唯一的 App ID。
- 这个 ID 对应你应用的 Bundle Identifier,例如 com.yourcompany.appname。
注意事项:
App ID 必须是唯一的。
如果已经有 App ID,就可以直接复用。
3.3 配置 Bundle Identifier
- 打开 Xcode 工程,进入 Project → TARGETS → Signing & Capabilities。
- 确认 Bundle Identifier 和 Apple Developer 里创建的 App ID 保持一致。
- 没有对应关系的话,证书生成后是无法绑定到你的 App 上的。
3.4 一台 Mac 电脑
- 推送证书的生成过程需要用到 macOS 自带的「钥匙串访问」(Keychain Access)。
- Windows 用户无法直接完成,需要在 Mac 上操作。
四. 配置步骤(核心部分)
接下来我们一步一步完成从 Apple Developer 创建推送证书,到最终导出 .p12 文件的完整过程。
4.1 登录 Apple Developer
- 打开 Apple Developer 网站,用你的开发者账号登录。
- 左侧菜单进入 Certificates, Identifiers & Profiles。
4.2 创建推送证书
- 然后进入 Certificates 页面,点击右上角的加号 +。
- 在证书类型列表中,选择 Apple Push Notification service SSL (Sandbox & Production)。(如果只是开发使用可以只选择Sandbox)
- 选择对应的AppId。
4.3 生成 CSR 文件(本地操作)
- 打开 Mac 的 钥匙串访问 (Keychain Access)。
- 在菜单栏选择 证书助理 → 从证书颁发机构请求证书。
在弹出的窗口里:
- 用户邮箱地址:随便填一个自己的邮箱即可;
- 常用名称:建议写你的项目名,方便区分;
- CA 邮件地址:可以留空;
- 存储到磁盘,保存为 .certSigningRequest (CSR) 文件。
4.4 上传 CSR,生成 .cer 文件
- 回到 Apple Developer 网站,上传刚刚生成的 CSR 文件。
- 等待生成完成后,下载得到 .cer 文件。
- 双击 .cer 文件,会自动导入到钥匙串。
4.5 导出 p12 文件
- 打开「钥匙串访问」,找到刚导入的推送证书(名称里通常会有 Apple Push Services 字样)。
- 展开可以看到证书下方的 私钥。
- 选中证书和私钥,右键 → 导出。
- 在保存时选择 .p12 格式,并设置一个导出密码(服务端需要用到)。
此时你就拿到了最终的 .p12 文件。
- 这个文件需要交给服务端,用来和 APNs 建立安全连接。
- iOS 客户端不需要关心这个文件,只需要正常调用 APNs 注册方法。
五. 常见问题与排查
在配置 iOS 推送证书的过程中,开发者经常会遇到一些坑,这里整理几个常见问题:
5.1 导出的 p12 没有私钥怎么办?
- 问题表现:导出的 p12 文件无法使用,服务端报错。
- 解决方法:在钥匙串中导出时,必须同时勾选 证书和私钥。如果只选了证书而没有私钥,导出的 p12 就不完整,需要重新生成 CSR → cer → p12。
5.2 为什么开发环境能推送,上架后收不到?
- 常见原因:使用了 Sandbox(开发证书),而 App Store 上的应用需要 Production(生产证书)。
- 解决方法:生成证书时选择 Apple Push Notification service SSL (Sandbox & Production),避免环境不一致的问题。
5.3 p12 密码忘记了怎么办?
- 导出 p12 时设置的密码,服务端调用时必须使用。
- 如果忘记了,无法找回,只能重新导出一个新的 p12 文件。
5.4 证书过期了怎么办?
- APNs 证书通常有效期为 1 年。
- 到期后推送会全部失效,需要重新生成新的证书,并导出新的 p12 文件替换到服务端。
5.5 p12 和 p8 有什么区别?
- p12:传统方式,需要每年更新证书。
- p8:基于 Token 的新方式(JWT),只需要生成一次,长期有效。
- 如果项目刚开始,建议先用 p12 熟悉流程;后续可以升级到 p8,更加方便。
六. 结语
到这里,我们已经完整地走完了 iOS 推送证书的配置流程:
- 在 Apple Developer 创建 App ID 并开启推送功能;
- 本地生成 CSR 文件,上传到 Apple Developer;
- 下载并导入 .cer 证书;
- 从钥匙串导出 .p12 文件,交给服务端使用。
虽然步骤看起来不少,但实际上逻辑非常清晰:Apple Developer 生成证书 → 钥匙串导出 → 服务端使用。只要跟着流程操作一次,你就能彻底搞清楚 p12 的来龙去脉。
需要注意的是:
- 推送证书是有有效期的,通常是一年;
- 如果证书过期,需要重新生成并替换服务端;
- 导出 p12 时一定要包含私钥,否则无法使用。
👉 本文介绍的是传统的 p12 证书方案,在绝大多数项目中依然适用。不过 Apple 现在也提供了更简单的 p8(基于 Token 的认证方式),相比 p12,p8 只需生成一次,长期有效,不需要每年更换,非常适合生产环境。
在接下来的文章里,我会介绍如何配置和使用 p8 推送证书,以及它和 p12 的区别与优劣。