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

使用Retrofit调用FCM发送主题消息时持续返回401错误求助

解决FCM主题消息发送401错误的排查方案

最可能的直接问题:Authorization头格式错误

你的NotificationApi.kt里的授权头写法有问题:

@Headers("Authorization: key = ${Constants.SERVER_KEY}, " +
        "Content-Type: ${Constants.CONTENT_TYPE}")

FCM要求授权头的格式是Authorization: key=YOUR_SERVER_KEY,key和服务器密钥之间不能有空格。修正后的代码应该是:

@Headers("Authorization: key=${Constants.SERVER_KEY}, " +
        "Content-Type: ${Constants.CONTENT_TYPE}")

其他需要逐一排查的点

  • 确认服务器密钥类型正确:别把Web API密钥当成服务器密钥用。正确的服务器密钥在Firebase控制台的「项目设置」→「云消息传递」里,找「服务器密钥」那一项。
  • 检查FCM API是否启用:去Google Cloud控制台搜你的项目,找到「Firebase Cloud Messaging API」,确保它是启用状态——有时候新建项目默认没开这个API。
  • IP限制是否拦截了请求:如果你的服务器密钥设置了IP白名单,调试阶段可以先关掉限制试试,确认是不是IP不在允许列表里导致的401。
  • 主题格式是否正确:发送主题消息时,to字段必须是"/topics/你的主题名",比如"/topics/sports",只写主题名会导致请求无效。
  • Retrofit头是否被覆盖:检查有没有OkHttp拦截器修改了Authorization头,有些拦截器会自动添加或覆盖请求头,导致你的密钥没生效。

快速验证请求的方法

用Postman直接发请求测试,排除代码问题:

  1. 请求方式选POST,地址填https://fcm.googleapis.com/fcm/send
  2. 添两个请求头:
    • Authorization: key=你的服务器密钥
    • Content-Type: application/json
  3. 请求体用JSON格式:
    {
        "data": {
            "title": "测试标题",
            "msg": "测试内容"
        },
        "to": "/topics/你的主题"
    }
    

如果Postman能成功发送,那问题肯定在你的Android代码里;如果还是401,那就是密钥或云服务配置的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:53:39