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

Codeigniter 4集成Firebase HTTP V1推送通知报SENDER_ID_MISMATCH错误的排查与解决

Codeigniter 4集成Firebase HTTP V1推送通知报SENDER_ID_MISMATCH错误的排查与解决

我之前也碰到过一模一样的问题,一开始也纳闷:明明代码里没用到Sender ID,JSON密钥里也找不到,怎么就报不匹配了呢?咱们一步步拆解问题,找到解决办法。

先搞懂SENDER_ID_MISMATCH的本质

这个错误的核心逻辑其实很简单:你的设备令牌(Device Token)是客户端用某一个Firebase项目的Sender ID生成的,但你现在服务端用的是另一个Firebase项目的凭证来发通知,两者不绑定,所以被拒绝了。虽然你代码里没直接写Sender ID,但Firebase的客户端和服务端是通过Sender ID隐式绑定的。

具体排查与解决步骤

1. 先确认设备令牌对应的Sender ID

Android客户端生成FCM令牌时,是和google-services.json里的project_number(这个就是Sender ID)绑定的。你要做:

  • 打开客户端的google-services.json,找到project_number字段,记下这个数值。
  • 去Firebase控制台,看看这个project_number属于哪个项目(每个项目的Sender ID是唯一的,在项目的「设置」->「云消息传递」里能看到)。

2. 核对服务端的Firebase项目信息

  • 打开你服务端用的JSON密钥文件,找到project_id字段,去Firebase控制台找到这个项目,查看它的「云消息发送者ID」(也就是Sender ID)。
  • 对比这个Sender ID和客户端project_number是不是完全一致?如果不一样,这就是问题根源!
  • 同时,你代码里的PROJECT_ID_HERE必须和JSON密钥里的project_id完全一致,确保你请求的是正确项目的V1 API。

3. 修正配置不匹配的问题

如果发现客户端和服务端的项目Sender ID不匹配,有两种修正方式:

  • 方案一:把客户端的google-services.json换成服务端项目对应的文件,然后重新运行客户端,生成新的设备令牌,再用这个新令牌测试。
  • 方案二:把服务端的JSON密钥换成客户端项目对应的密钥,同时修改代码里的PROJECT_ID_HERE为该项目的ID,然后测试。

4. 额外的细节检查

  • 有没有可能你在客户端用了多个Firebase实例?或者旧的google-services.json没替换干净?建议彻底清理客户端的构建缓存,重新生成令牌。
  • 你代码里的trim($this->request->getPost('token'))这个处理很到位,避免了令牌带空格的问题,可以保留。
  • 可以用Firebase控制台的「云消息传递」->「发送测试消息」功能,直接输入这个设备令牌测试:如果控制台也报错,那肯定是令牌和项目不匹配;如果控制台能发成功,再检查服务端代码的请求头和请求体有没有格式错误(你的请求体格式看起来是符合V1 API要求的)。

总结

最常见的原因就是客户端和服务端用了不同Firebase项目的配置,导致生成的令牌和发送凭证不绑定。只要把所有环节的配置统一到同一个Firebase项目,重新生成令牌再测试,就能解决这个SENDER_ID_MISMATCH的问题啦!

备注:内容来源于stack exchange,提问作者Ganesh Gadge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 09:05:27