Swift 3集成Firebase推送通知收不到消息问题排查
Firebase推送通知已获取令牌但收不到消息的排查方案
嘿,我太懂这种控制台显示发送成功,但App就是没反应的挫败感了!既然你已经成功拿到了推送令牌,咱们可以从这些常见点入手排查:
1. 通知权限是否真的生效了?
你得确保App已经正确向用户申请了通知权限,并且用户允许了。检查下你的application(_:didFinishLaunchingWithOptions:)里有没有这段代码:
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in guard granted else { // 用户拒绝了权限,这里可以加引导提示 return } DispatchQueue.main.async { UIApplication.shared.registerForRemoteNotifications() } }
另外去系统设置里看看你的App有没有开启通知权限,要是用户之前点了拒绝,得引导他们去设置里打开。
2. Firebase Messaging代理有没有正确配置?
首先得让你的AppDelegate遵循MessagingDelegate协议,然后设置代理并实现消息接收的方法:
// 在didFinishLaunching里设置代理 Messaging.messaging().delegate = self // 实现接收消息的方法 func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) { print("收到数据消息:\(remoteMessage.appData)") // 前台收到消息时的处理逻辑写在这 }
要是没设置代理,Firebase没法把消息传递给你的App。
3. APNs证书和环境是否匹配?
这是最容易踩坑的点:
- 检查Firebase控制台里上传的APNs证书,是开发环境还是生产环境的?要和你当前运行App的环境(Debug/Release)完全对应。
- 确认证书的Bundle ID和你App的Bundle ID完全一致,证书有没有过期。
- 查看App的
Entitlements文件,Push Notifications权限要开启,APS Environment要对应环境(开发填development,生产填production)。
4. 前台接收消息的配置没做?
默认情况下,App在前台运行时是不会弹出通知横幅的,你需要手动配置:
先让AppDelegate遵循UNUserNotificationCenterDelegate,然后设置代理并实现这个方法:
// 在didFinishLaunching里设置代理 UNUserNotificationCenter.current().delegate = self // 允许前台显示通知 func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { completionHandler([.alert, .sound, .badge]) }
5. 后台模式有没有开启?
在Xcode的Signing & Capabilities里,添加Background Modes并勾选Remote notifications选项,不然App在后台或者锁屏状态下可能收不到推送。
6. 测试用的令牌和环境不匹配?
确认你在Firebase控制台测试时用的令牌,是当前设备的最新令牌,而且令牌对应的环境(开发/生产)和你发送消息时选择的目标环境一致。比如Debug环境的令牌不能用来发送生产环境的消息。
如果这些都排查完还是没解决问题,建议把完整的AppDelegate代码贴出来,这样能更精准定位问题~
内容的提问来源于stack exchange,提问作者cristian franco
相关产品推荐
相关产品推荐

