2、开发者账号与证书:Apple Developer Program注册、App ID创建、推送证书(Development/Production)生成与配置

好,咱们正式开始动手了。

推送通知这件事,说白了就是你的服务器跟苹果的推送服务器(APNs)之间的一次握手。而握手的前提,是你得先拿到合法的「身份证」——也就是开发者账号和推送证书。

我见过不少新手,代码写得飞起,结果卡在证书配置上,一卡就是半天。其实没那么复杂,咱们一步步来。

2.1 注册 Apple Developer Program

首先,你得有个 Apple ID。这个不用我多说吧?

然后打开 developer.apple.com,点击「Account」登录。如果你是第一次,会看到加入 Apple Developer Program 的入口。

这里有个坑:个人账号 99 美元/年,公司账号 299 美元/年。我个人习惯是,如果只是个人开发或者小团队,直接选个人账号就行。公司账号主要是为了在 App Store 显示公司名称,以及支持多人协作管理。

注册过程很简单,填信息、付款、等审核。一般几分钟到几小时不等。我记得有一次帮朋友注册,等了整整一天,后来发现是信用卡账单地址填错了。嗯,这里要注意,账单地址必须跟银行预留地址一致

小提示:如果你已经有 Apple ID,建议专门注册一个开发者专用的 ID,别跟日常 iCloud 账号混用。我吃过这个亏,后来管理证书时乱成一锅粥。

2.2 创建 App ID

账号搞定了,接下来就是创建 App ID。App ID 是你的应用在苹果生态里的唯一标识。

登录开发者中心,进入「Certificates, Identifiers & Profiles」,选择「Identifiers」→「App IDs」→ 点击「+」。

这里需要填写:

  • Description:随便写,比如「My Push App」
  • Bundle ID:这个必须跟 Xcode 项目里的 Bundle Identifier 一致。比如 com.example.mypushapp
  • Capabilities:勾选 Push Notifications

为什么一定要勾选 Push Notifications?因为只有勾选了,苹果才会允许你这个 App ID 使用推送功能。不勾选的话,后面生成证书时会报错。

注意:Bundle ID 一旦创建,不能修改。只能删除重建。所以命名时想清楚,别手滑。

2.3 生成推送证书(Development / Production)

App ID 创建好了,接下来就是生成证书。推送证书分两种:

类型 用途 有效期
Development(开发) 用于 Xcode 调试、本地测试 1 年
Production(生产) 用于 App Store 发布后的正式推送 1 年

我个人建议:两个都生成。开发阶段用 Development,上线前换成 Production。别偷懒只生成一个,否则上线后推送挂了,你都不知道问题出在哪。

2.3.1 生成步骤

  1. 在开发者中心,进入「Certificates, Identifiers & Profiles」→「Certificates」→ 点击「+」。
  2. 选择「Apple Push Notification service SSL (Sandbox & Production)」。
  3. 选择你刚才创建的 App ID。
  4. 按照提示,在 Mac 上打开「钥匙串访问」→「证书助理」→「从证书颁发机构请求证书」。
  5. 填写邮箱和常用名称,选择「存储到磁盘」,生成一个 .certSigningRequest 文件。
  6. 上传这个文件,苹果会生成一个 .cer 证书文件。
  7. 下载 .cer 文件,双击导入钥匙串。

嗯,这里有个细节:钥匙串里导入后,记得导出为 .p12 格式。因为服务器端通常需要 .p12.pem 文件来建立连接。

导出 .p12 的方法:在钥匙串中找到刚才导入的证书,右键 → 导出「...」→ 选择 .p12 格式 → 设置密码。这个密码后面服务器配置时会用到。

2.3.2 开发证书 vs 生产证书

你可能会问:这两个证书长得一样吗?

其实不一样。Development 证书的标题里会带「Sandbox」字样,Production 证书带「Production」。而且它们连接的 APNs 服务器地址也不同:

  • 开发环境:api.sandbox.push.apple.com
  • 生产环境:api.push.apple.com

我曾经犯过一个低级错误:开发阶段用 Production 证书去连 Sandbox 服务器,结果推送死活发不出去。排查了半天,最后发现是证书选错了。你想想看,这种问题多冤。

2.4 配置推送证书到服务器

证书生成好了,接下来要把它配置到你的后端服务器上。不管你是用 Node.js、Java、Python 还是 PHP,流程都差不多:

  1. .p12 文件上传到服务器。
  2. 在代码中加载证书,并指定密码。
  3. 建立与 APNs 的 TLS 连接。

举个 Node.js 的例子:

const apn = require('apn');

let options = {
  token: {
    key: 'path/to/APNsAuthKey.p8',  // 或者用 .p12
    keyId: 'ABCD1234',
    teamId: 'TEAMID12345'
  },
  production: false  // false 表示开发环境,true 表示生产环境
};

let provider = new apn.Provider(options);

这里多说一句:现在苹果更推荐使用 .p8 密钥(Token 认证),而不是传统的 .p12 证书。因为 .p8 不会过期,而且可以跨多个应用使用。我个人也倾向于用 .p8,省心很多。

避坑指南:如果你用 .p12 证书,记得每年到期前更新。我曾经因为忘记更新证书,导致线上推送中断了整整一个周末。那滋味,别提了。

2.5 常见问题与排查

最后,分享几个我实际踩过的坑:

  • 证书无效:检查 Bundle ID 是否匹配,证书是否过期。
  • 推送发不出去:先确认是开发环境还是生产环境,然后检查服务器连接的 APNs 地址是否正确。
  • 设备收不到:检查 device token 是否获取成功,以及 App 是否在前台(前台默认不弹通知,除非你实现了 willPresent 方法)。

嗯,证书这部分其实不难,就是步骤多。你只要按顺序来,别跳步,基本不会出问题。

下一章,咱们会讲如何在 Xcode 里配置推送能力,以及如何获取 device token。准备好了吗?