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

迁移FCM至HTTP v1:Android应用AccessToken获取异常排查

FCM HTTP v1迁移AccessToken生成报错「Invalid grant: account not found」的排查方案

可能原因

  • 应用加载服务账号JSON文件时出现异常,导致关键字段缺失或格式损坏
  • OAuth请求的JWT参数构造错误,包括签名算法、payload字段、请求格式
  • 应用运行环境的网络/代理干扰了OAuth请求
  • 服务账号密钥存在隐性问题(虽gcli可用,但应用场景下触发异常)

解决步骤

1. 验证JSON文件加载完整性

  • 打印应用中读取到的JSON内容,和本地原始文件逐字段对比:重点确认client_email、private_key、private_key_id、client_id完整无错
  • 若为Android应用,确保文件放在assets目录,读取时用字节流完整读取,避免编码或换行符丢失(比如private_key中的换行符不能被替换为空格)

2. 核对OAuth请求参数与JWT构造

  • 确认JWT的payload包含以下必填字段:
    • iss:服务账号的client_email
    • scope:固定为https://www.googleapis.com/auth/firebase.messaging
    • aud:固定为https://oauth2.googleapis.com/token
    • exp:当前时间戳+3600(有效期不能超过3600秒)
    • iat:当前时间戳
  • 签名必须使用RS256算法,确保private_key被正确解析(注意JSON中的private_key带换行,需保留原始格式)
  • POST请求的Content-Type必须设为application/x-www-form-urlencoded,参数为grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer和assertion=生成的JWT串

3. 排查服务账号与密钥状态

  • 登录Google Cloud控制台,确认目标服务账号处于「启用」状态,且已绑定Cloud Messaging Admin角色
  • 尝试重新生成服务账号密钥(下载新的JSON文件),替换应用中的旧文件后重试

4. 检查应用网络环境

  • 打印应用发起的OAuth请求完整细节(URL、请求头、参数),与gcli的请求对比(可执行gcloud auth print-access-token --log-http查看gcli请求日志)
  • 测试应用运行环境能否直接访问oauth2.googleapis.com,排除防火墙、代理导致的请求篡改或截断问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:33:20