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

Expo双App间FCM Server Key报错排查请求

问题排查与解决方案

核心问题定位

报错提示无法获取接收方App的FCM服务器密钥,且标记为InvalidCredentials,说明App A的FCM凭证在Expo或Supabase侧未正确配置/关联,导致B发起推送请求时,Supabase Edge Functions调用Expo服务无法验证App A的权限。

具体排查步骤

1. 验证App A的Expo凭证配置

  • 确认Expo控制台中App A的Google服务账号密钥是对应Firebase项目的正确密钥:
    • 检查Firebase项目是否与App A绑定,密钥是否是该项目的service-account.json文件(而非App B的)
    • 确保上传密钥时,Expo控制台的项目选择正确,没有误上传到App B的配置里
  • 检查Expo项目的app.json/app.config.js中,android.googleServicesFile(Android)或ios.googleServicesFile(iOS)是否正确指向本地的服务账号文件,且该文件内容与Expo控制台上传的一致

2. 检查Supabase Edge Functions中的凭证关联

  • 确认Edge Functions中处理推送的代码,是否正确区分了两个App的Expo项目ID:
    • 发送通知时,是否根据接收方的App标识(比如用户数据中存储的App类型/项目ID),正确调用对应Expo项目的推送服务
    • 检查是否存在硬编码的Expo项目ID,导致B发送时错误使用了自己的项目ID去获取A的FCM密钥
  • 验证Supabase存储的用户推送令牌是否与对应App关联:确保App A用户的令牌被标记为属于A的项目,App B用户的令牌属于B的项目,避免推送时混淆了接收方的App归属

3. 验证Expo Push API的权限

  • 手动调用Expo Push API测试App A的凭证有效性:
    使用curl发送测试请求(替换EXPO_TOKEN_A为App A的有效推送令牌,EXPO_PROJECT_ID_A为A的项目ID):
    curl -H "Content-Type: application/json" -X POST "https://exp.host/--/api/v2/push/send" -d '{
      "to": "EXPO_TOKEN_A",
      "title": "Test",
      "body": "Test notification from API"
    }'
    
    如果返回同样的InvalidCredentials错误,说明问题出在Expo侧的凭证配置,需重新上传App A的服务账号密钥并等待Expo同步(可能需要10-15分钟)

4. 检查Firebase项目的权限配置

  • 确认Firebase项目中,服务账号是否拥有Cloud Messaging Admin权限:
    登录Firebase控制台,进入项目设置 > 服务账号,找到对应的服务账号,检查其角色是否包含Firebase Cloud Messaging Admin
  • 确保Firebase项目的云消息服务未被禁用,且API密钥未过期或被限制

常见遗漏点

  • 上传Expo凭证后未重新构建/发布App:修改Expo凭证后,需要重新生成构建包(eas build)或发布更新(expo publish),否则App侧的配置不会同步
  • 两个App共享了同一个Firebase项目:如果两个App使用同一Firebase项目,需确保Expo控制台中两个项目都上传了该项目的服务账号密钥,且Firebase侧允许该项目向两个App发送消息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:20:57