You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FCM推送通知至iOS真机无接收问题技术求助

嘿,我之前也碰到过类似的FCM推送问题,折腾了好一阵才搞定,给你列几个最容易踩坑的排查点,你一个个核对下:

排查FCM推送不显示的关键步骤
  • 确认通知权限是否正确获取
    你得确保App已经向用户申请了通知权限,并且用户允许了。在didFinishLaunchingWithOptions里,除了FCM的配置,还要加权限申请代码:

    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in
        guard granted else { return }
        DispatchQueue.main.async {
            UIApplication.shared.registerForRemoteNotifications()
        }
    }
    

    而且要检查Info.plist里有没有加NSUserNotificationUsageDescription(iOS 10+),不然权限申请弹窗根本不会出现,用户没法授权。

  • 检查APNs证书/密钥是否配置正确
    FCM是依赖APNs推送的,所以你得确保在Firebase控制台的「项目设置>云消息传递」里,已经上传了正确的APNs证书(开发和生产环境要分开),或者配置了APNs密钥。如果用Xcode自动管理签名,也要确认你的开发者账号里已经开启了Push Notifications服务。

  • 后台模式是否开启
    在Xcode的项目配置「Signing & Capabilities」里,要开启「Background Modes」,并勾选「Remote notifications」。这一步超容易忘,没开的话App后台或者锁屏时基本收不到推送。

  • 检查推送消息的格式
    如果你用Firebase控制台发测试消息,要注意:

    • 发送的是通知消息(Notification message),而不是仅数据消息(Data message)——数据消息需要你自己在代码里处理展示,控制台发的话要确保勾选了「通知」标签。
    • 如果用API发送,要确保payload里包含notification字段,并且content_available设为true(需要后台唤醒的话)。比如:
      {
        "to": "你的FCM令牌",
        "notification": {
          "title": "测试标题",
          "body": "测试内容"
        },
        "content_available": true
      }
      
  • 验证App Delegate的FCM代码是否完整
    你提到已经实现了部分代码,还要确认这几个关键方法有没有写:

    // 注册APNs成功获取deviceToken后,传给FCM
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        Messaging.messaging().apnsToken = deviceToken
    }
    
    // 处理前台收到的通知(要显示的话必须实现)
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        // 前台时也要弹出通知的话,返回对应的选项
        completionHandler([.alert, .badge, .sound])
    }
    

    另外,iOS 13+还要记得设置UNUserNotificationCenter的代理:

    UNUserNotificationCenter.current().delegate = self
    
  • 区分测试/生产环境
    如果你的App是用开发证书打包的,FCM要发送到开发环境;如果是Ad Hoc或App Store版本,要切换到生产环境。Firebase控制台发送时可以选择「测试设备」,API发送则要设置apns-environment为development或production。

  • 检查设备本身的通知设置
    最后别忘了看iPhone的系统设置:确保你的App通知是开启的,没有被静音、屏蔽,或者在「专注模式」里被排除了。

按这个顺序排查下来,大概率能找到问题所在~

内容的提问来源于stack exchange,提问作者madmanprogram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:34:27