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 显示公司名称,以及支持多人协作管理。
注册过程很简单,填信息、付款、等审核。一般几分钟到几小时不等。我记得有一次帮朋友注册,等了整整一天,后来发现是信用卡账单地址填错了。嗯,这里要注意,账单地址必须跟银行预留地址一致。
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 使用推送功能。不勾选的话,后面生成证书时会报错。
2.3 生成推送证书(Development / Production)
App ID 创建好了,接下来就是生成证书。推送证书分两种:
| 类型 | 用途 | 有效期 |
|---|---|---|
| Development(开发) | 用于 Xcode 调试、本地测试 | 1 年 |
| Production(生产) | 用于 App Store 发布后的正式推送 | 1 年 |
我个人建议:两个都生成。开发阶段用 Development,上线前换成 Production。别偷懒只生成一个,否则上线后推送挂了,你都不知道问题出在哪。
2.3.1 生成步骤
- 在开发者中心,进入「Certificates, Identifiers & Profiles」→「Certificates」→ 点击「+」。
- 选择「Apple Push Notification service SSL (Sandbox & Production)」。
- 选择你刚才创建的 App ID。
- 按照提示,在 Mac 上打开「钥匙串访问」→「证书助理」→「从证书颁发机构请求证书」。
- 填写邮箱和常用名称,选择「存储到磁盘」,生成一个
.certSigningRequest文件。 - 上传这个文件,苹果会生成一个
.cer证书文件。 - 下载
.cer文件,双击导入钥匙串。
嗯,这里有个细节:钥匙串里导入后,记得导出为 .p12 格式。因为服务器端通常需要 .p12 或 .pem 文件来建立连接。
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,流程都差不多:
- 把
.p12文件上传到服务器。 - 在代码中加载证书,并指定密码。
- 建立与 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,省心很多。
2.5 常见问题与排查
最后,分享几个我实际踩过的坑:
- 证书无效:检查 Bundle ID 是否匹配,证书是否过期。
- 推送发不出去:先确认是开发环境还是生产环境,然后检查服务器连接的 APNs 地址是否正确。
- 设备收不到:检查 device token 是否获取成功,以及 App 是否在前台(前台默认不弹通知,除非你实现了
willPresent方法)。
嗯,证书这部分其实不难,就是步骤多。你只要按顺序来,别跳步,基本不会出问题。
下一章,咱们会讲如何在 Xcode 里配置推送能力,以及如何获取 device token。准备好了吗?