Flutter/Firebase Cloud Messaging 10.0.1+ iOS端无法接收通知求助
Flutter iOS端FCM推送收不到通知排查解决步骤
- 补全AppDelegate缺失的APNs-FCM联动逻辑
你已配置FirebaseAppDelegateProxyEnabled: NO禁用了Firebase自动代理拦截APNs回调,必须手动实现APNs令牌上报FCM的逻辑,否则FCM无法关联推送请求与APNs通道。首先在AppDelegate头部引入依赖:
import FirebaseMessaging
再在AppDelegate类中添加以下两个方法:
// APNs注册成功后将设备令牌传给FCM override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken super.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken) } // 实现前台通知展示逻辑(需要前台弹出通知时添加) @available(iOS 10.0, *) override func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { completionHandler([.alert, .badge, .sound]) }
检查Xcode能力配置
确认「Signing & Capabilities」中除了Background Modes下的Remote notifications,还单独添加了Push Notifications能力,该配置是iOS推送生效的必要前提。同时确认当前打包使用的Provisioning Profile已开启推送权限,不要使用未更新权限的旧配置文件。核对Firebase控制台APNs配置
确认Firebase控制台对应项目的iOS应用配置中,已正确上传APNs认证密钥(.p8文件)或对应生产/开发环境的APNs证书,TestFlight生产包必须使用支持生产环境的APNs凭证。确认推送环境匹配性
TestFlight安装的是生产环境包,从FCM控制台发测试消息时需选择生产环境推送目标,不要选择沙箱开发环境;同时确认写入数据库的FCM令牌是当前TestFlight包生成的生产环境令牌,不要混用开发环境令牌测试。验证APNs通道本身可用性
你可以直接用APNs测试工具,通过上传到Firebase的APNs凭证直接给设备发推送,如果能收到说明问题出在FCM与APNs的联动配置,如果收不到说明APNs证书/配置文件本身存在问题。
内容的提问来源于stack exchange,提问作者Miles Zoltak
相关产品推荐
相关产品推荐

