You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

从APNS迁移至FCM后推送通知失效,是否需调整服务端?

针对APNS迁移FCM后服务端推送失败的排查建议

看起来你已经完成了基础迁移步骤,但服务端推送没反应、控制台能正常推的情况,大概率是服务端的FCM请求细节没调整到位。我帮你梳理几个关键检查点:

1. 确认请求端点与认证方式是否正确

虽然你提到改了端点,但要注意FCM有两种API,认证和端点完全不同:

  • 如果用FCM HTTPv1 API(官方推荐):
    • 端点是https://fcm.googleapis.com/v1/projects/{你的Firebase项目ID}/messages:send
    • 不能再用APNS的.p12/.pem证书认证,必须换成Firebase控制台生成的服务账号密钥,通过生成JWT令牌来做请求头认证
  • 如果用FCM Legacy API(兼容旧代码):
    • 端点是https://fcm.googleapis.com/fcm/send
    • 请求头的Authorizationkey={你的FCM服务器密钥}(在Firebase控制台的Cloud Messaging模块里获取),不是APNS那套证书认证逻辑

2. 检查请求体格式是否符合FCM要求

FCM的请求结构和APNS差异不小,尤其是iOS相关的配置需要嵌套在apns字段里,举两个常见的正确示例:

Legacy API请求体示例

{
  "to": "客户端获取的FCM令牌",
  "notification": {
    "title": "测试标题",
    "body": "测试内容"
  },
  "apns": {
    "payload": {
      "aps": {
        "sound": "default",
        "badge": 1
      }
    }
  }
}

HTTPv1 API请求体示例

{
  "message": {
    "token": "客户端获取的FCM令牌",
    "apns": {
      "payload": {
        "aps": {
          "alert": {
            "title": "测试标题",
            "body": "测试内容"
          },
          "sound": "default",
          "badge": 1
        }
      }
    }
  }
}

注意:一定要用客户端最新获取的FCM令牌,不能再传旧的APNS令牌给FCM接口。

3. 验证Firebase项目的APNS配置

虽然控制台能推说明配置基本没问题,但还是要确认:

  • Firebase控制台的Cloud Messaging模块下,已经上传了对应环境(开发/生产)的APNS证书
  • 证书的推送通知权限正常,没有过期

4. 一定要查看FCM的响应错误信息

服务端发送请求后,务必打印完整的响应内容。FCM会返回非常明确的错误提示:

  • 比如UNAUTHENTICATED说明认证失败(密钥或JWT有问题)
  • INVALID_ARGUMENT说明请求格式错误(比如字段名写错)
  • InvalidRegistration说明令牌无效(可能是旧APNS令牌,或者令牌已过期/失效)
    这些错误信息是定位问题最快的方式。

5. 确认环境与权限匹配

  • 客户端的推送权限是否在迁移后重新请求过?iOS 10+需要用户明确授权,迁移后如果客户端逻辑没更新,可能导致权限丢失
  • 服务端推送的环境要和客户端一致:比如客户端是Debug模式(用APNS开发环境),服务端就要对应FCM的开发配置,不能用生产证书推Debug设备

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

火山引擎 最新活动