未在didRegisterForRemoteNotificationsWithDeviceToken中获取到设备令牌
解决APNS设备令牌回调不触发的问题
1. 先处理Firebase的影响
你之前用过Firebase GCM,现在虽不再使用,但FirebaseApp.configure()会初始化Firebase推送模块,它会接管didRegisterForRemoteNotificationsWithDeviceToken的回调逻辑,导致你的自定义代码无法执行:
- 先注释掉
FirebaseApp.configure()这一行,重新编译运行测试 - 如果回调正常触发,再彻底移除Firebase相关依赖:删除Podfile中的Firebase库、移除项目里的
GoogleService-Info.plist文件,执行pod install更新依赖
2. 添加注册失败回调排查错误
你目前只实现了成功回调,没有处理注册失败的场景,添加以下方法可获取具体错误信息,帮你定位问题:
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { print("APNS注册失败:\(error.localizedDescription)") }
3. 检查项目推送配置
- 打开项目的
Capabilities面板,确认Push Notifications已开启 - 检查
Entitlements文件,确保包含aps-environment字段,调试环境值为development,发布环境值为production - 确认推送证书有效,且与当前项目的Bundle ID匹配,调试时用开发证书,发布时用生产证书
4. 确认AppDelegate的关联
检查Info.plist中的UIApplicationDelegateClassName字段,确保其值为你的AppDelegate类的完整路径,避免其他自定义Delegate接管应用生命周期回调
5. 排查网络环境问题
苹果APNS服务器的连接可能被部分内网防火墙屏蔽,切换到手机蜂窝网络测试,看是否能正常触发回调
内容的提问来源于stack exchange,提问作者HarryMoy
相关产品推荐
相关产品推荐

