Firebase iOS推送通知发送失败问题排查求助
咱们先来拆解你遇到的「Registration token not registered」错误,结合你给出的配置步骤,我梳理了几个最可能的问题点:
1. Bundle ID完全不匹配(最核心的明显问题)
你步骤1创建的App ID是com.company.appname.country,但步骤5生成的开发描述文件是给com.bossitalia.gobooking.ch用的,而且Firebase里配置的也是com.company.appname.country的SSL证书——这完全对不上!
FCM推送是严格绑定Bundle ID的,必须保证三者完全一致:
- Firebase项目中添加的iOS App的Bundle ID
- XCode项目设置里的Bundle ID
- 苹果开发者后台创建的App ID
如果这三个不一致,FCM根本无法把推送请求关联到正确的APNs配置,自然会报token未注册的错误。
2. 目标App ID未启用推送通知服务
你步骤1明确提到,新创建的com.company.appname.country App ID未启用推送通知服务——这是致命问题!
苹果开发者后台的App ID必须开启「Push Notifications」功能,才能生成有效的APNs推送证书,也才能让设备成功向APNs注册,进而获取有效的FCM token。没有开启这个功能的话,整个推送链路从根源上就断了。
3. 推送环境与Token生成环境不匹配
你当前用的是开发证书和开发描述文件,意味着App运行在Debug(开发)环境,对应的APNs环境是Sandbox。如果:
- Firebase控制台测试推送时,你选择了「Production(生产)」环境
- 或者你配置的是生产环境的APNs证书,但用的是开发环境生成的token
这两种情况都会导致FCM无法找到对应的APNs设备记录,触发「Registration token not registered」错误。务必保证推送环境和App运行环境完全一致。
4. 设备Token失效或未正确注册
这个错误也可能是Token本身的问题:
- 检查XCode控制台,确认App启动时是否成功获取到了FCM token,如果没有输出,说明注册过程有问题(比如推送权限被用户拒绝,或者代码里的FCM注册逻辑有误)
- 如果用户卸载过App、重置过设备,之前的Token就会失效,需要重新获取新的Token再进行测试
- 确认用户在设备上是否允许了App的推送权限,没有权限的话,设备根本无法注册到APNs
5. APNs证书配置错误
你提到配置了.p12格式的证书,需要确认几个点:
- 证书对应的Bundle ID必须和你的App完全一致,不能混用其他App ID的证书
- 证书的环境要匹配:开发环境用Sandbox证书,生产环境用Production证书
- 导出.p12时,必须从钥匙串中选中证书+对应的私钥一起导出,缺少私钥的证书是无效的
6. 开发描述文件未包含推送权限
你步骤5中生成的开发描述文件是给com.bossitalia.gobooking.ch用的,需要确认:
- 这个描述文件对应的App ID已经开启了推送通知服务
- 重新生成描述文件时,要确保勾选了正确的App ID,并且苹果后台会自动包含推送权限的配置(前提是App ID已经开启了推送)
- 在XCode中查看描述文件的详情,确认里面包含「Push Notifications」的权限
优先排查顺序
建议你先解决前两个问题:统一Bundle ID、给目标App ID开启推送通知服务,这两个是最明显的根源问题,解决后再逐一验证其他点。
内容的提问来源于stack exchange,提问作者Simone Campagna

