You need to enable JavaScript to run this app. Spring Boot FCM向Expo RN推送报SenderId mismatch错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot FCM向Expo RN推送报SenderId mismatch错误如何解决

问题本质

SenderID mismatch 报错的核心触发条件是:当前发送请求使用的鉴权身份、消息接收方的推送令牌、调用的FCM接口所属项目三者不匹配。
你当前操作中存在两个核心的配置混淆:

  • 新旧FCM鉴权逻辑混用
  • 变量存储的值类型完全错误

错误定位与修复步骤

1. 区分两套FCM鉴权体系,禁止交叉混用

当前FCM存在两套独立的鉴权逻辑,不能混合使用:

  • 旧版已逐步废弃的HTTP接口:需要在请求头携带Authorization: key=[旧版Server Key],对应请求地址为https://fcm.googleapis.com/fcm/send
  • 新版官方推荐的v1接口:通过Firebase服务账号私钥自动生成OAuth2访问凭证做鉴权,完全不需要手动传入Server Key,对应请求地址就是你报错日志中出现的https://fcm.googleapis.com/v1/projects/[项目ID]/messages:send
    你现在的操作就是把两套体系的逻辑混在了一起:
  • 初始化阶段用了新版v1接口要求的私钥认证
  • 发送阶段错误携带了旧版Server Key做鉴权,自然会触发项目校验不通过

2. 修正代码中的值类型错误

你代码中写死的AAAAm_p0hoc:****格式的字符串,本质是旧版FCM的Server Key值,根本不是设备端的推送接收令牌。
正确的推送接收令牌获取逻辑:

  • Expo项目配置FCM适配完成后,通过Expo SDK调用getDevicePushTokenAsync()方法获取当前设备的FCM注册令牌,这个令牌是设备在对应Firebase项目下生成的合法接收标识
  • 发送消息时,把这个从设备端获取的令牌作为消息目标传入,而不是把服务端的Server Key填进去

3. 保证项目配置全链路一致

  • 确认Expo项目中配置的google-services.json文件内的项目ID、Sender ID,和Spring Boot端加载的私钥所属的Firebase项目完全一致
  • 新建Firebase项目后,必须让Expo应用重新拉取一次设备推送注册令牌,不能直接复用旧项目下生成的设备令牌,否则会因为令牌所属项目和当前服务端鉴权项目不匹配触发报错

4. 简化发送逻辑

如果已经通过私钥初始化了FirebaseApp实例,不需要手动拼接FCM接口请求,直接获取内置的FirebaseMessaging实例调用send()方法即可。SDK会自动完成鉴权、请求拼接的全流程,从根源上避免鉴权逻辑混用的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 16:06:01