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

使用Firebase Rest API推送消息遇MismatchSenderId错误求助

解决FCM请求中的MismatchSenderId错误

我之前对接FCM的时候也踩过这个坑,太头疼了!咱们来一步步排查解决这个问题:

最常见的原因:服务器密钥和设备令牌不属于同一个Firebase项目

这是绝大多数人碰到这个错误的根源——你得仔细核对:

  • 你在Postman里用的服务器密钥,是不是和生成设备令牌的Android/iOS项目对应的同一个Firebase项目?有时候切换项目复制密钥时容易搞混,或者复制的时候漏了字符。
  • 核对方法:打开生成令牌的App对应的Firebase控制台,进入「设置>云消息传递」页面,把这里的服务器密钥和你Postman请求头里的Authorization字段里的密钥完全对比一遍,确保没有差异。

环境不匹配:测试/生产环境的密钥和令牌不对应

如果是iOS设备,这个问题特别容易出现:

  • iOS的APNs分开发和生产环境,对应的FCM令牌也会绑定环境。如果你的App是Debug打包生成的测试令牌,却用了生产环境的服务器密钥,就会触发这个错误;反过来也一样。
  • 解决办法:要么统一环境——测试令牌配测试密钥,生产令牌配生产密钥;要是用的是旧版FCM HTTP API,也可以在Firebase控制台启用「云消息传递API(旧版)」,用那个不分环境的服务器密钥(不过现在官方更推荐v1 API,你要是继续用旧版API的话可以试试这个)。

令牌已过期或无效

虽然onTokenRefresh()返回的令牌是最新的,但也有特殊情况会导致令牌失效:

  • 比如设备卸载重装了App、清除了App数据,或者Firebase项目的配置发生了变更,之前的令牌就会失效,这时候用旧令牌请求也会触发MismatchSenderId错误。
  • 解决办法:在App里添加逻辑,把新生成的令牌实时同步到你的服务器,确保测试时用的是刚生成的最新令牌;另外可以在Postman里换个刚获取的令牌再测试。

给你一个正确的Postman请求示例,方便你对照检查

请求URL:POST https://fcm.googleapis.com/fcm/send
请求头:

  • Content-Type: application/json
  • Authorization: key=你的服务器密钥(注意key=后面直接跟密钥,不要有空格)
    请求体(JSON格式):
{
  "to": "你的有效设备令牌",
  "notification": {
    "title": "测试通知",
    "body": "这是一条来自Postman的测试消息"
  }
}

如果以上方法都试过还是不行,你可以去Firebase控制台的「项目设置>服务账号」页面,重新生成一个服务器密钥,替换掉Postman里的密钥再试试——有时候旧密钥可能因为权限调整或者其他原因失效了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:57:23