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

.NET Core 8.0升级FCM推送遇无效注册令牌问题排查

问题解答:FCM HTTP v1 提示“无效注册令牌”

1. ExponentPushToken格式是否符合FCM HTTP v1要求?

不符合。ExponentPushToken[xxx]是Expo(原Exponent)专属的推送令牌格式,FCM HTTP v1 API仅接受原生FCM注册令牌——这类令牌是标准的长字符串格式(例如eKabc123xQ:APA91bGhijklmnopQrstuvwxyz...)。旧版FCM可能支持通过Expo的转发机制兼容这类令牌,但v1 API严格要求使用原生FCM令牌。

2. 其他可能导致错误的原因

  • 令牌已失效:设备卸载应用、清除应用数据、用户切换Google账号,或应用长时间未与FCM服务器同步,都会导致令牌被标记为无效
  • 项目不匹配:该令牌是从另一个Firebase项目生成的,与当前发送请求的项目ID不一致
  • 令牌输入错误:令牌存在拼写错误、多余空格,或被截断
  • 服务账号权限不足:生成Bearer Token的服务账号未配置Firebase Cloud Messaging Admin角色,导致FCM服务器无法验证令牌有效性
  • 平台配置错误:令牌对应iOS设备,但推送请求使用了Android专属配置,反之亦然

解决建议

  • 替换为原生FCM令牌:如果是Expo应用,需通过Expo的FCM集成获取原生令牌。例如使用expo-firebase-messaging库的getToken()方法,而非Expo的默认推送令牌
  • 验证令牌有效性:在Firebase控制台的「Cloud Messaging」模块,使用「发送测试消息」功能输入令牌,快速验证其是否有效
  • 检查服务账号权限:登录Google Cloud控制台,找到对应服务账号,为其添加Firebase Cloud Messaging Admin角色
  • 核对项目一致性:确保生成令牌的Firebase项目ID,与请求URL中的my-project-name-in-googleconsole完全一致
  • 优化Bearer Token获取代码:避免同步阻塞调用.Result,改用异步方式防止死锁:
string fileName = Path.Combine(Directory.GetCurrentDirectory(), "FirebaseServiceAccount\\xyz.json");
string scopes = "https://www.googleapis.com/auth/firebase.messaging";
string bearertoken;

using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
    var credential = GoogleCredential.FromStream(stream)
        .CreateScoped(scopes);
    bearertoken = await credential.UnderlyingCredential.GetAccessTokenForRequestAsync();
}
  • 校验Payload格式:确保notification和data字段符合FCM v1规范,例如notification仅包含title、body、image等官方定义的字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:56:28