从旧版FCM API迁移至HTTP v1后通知未收到,需更换密钥吗?
FCM v1 API 认证问题解决方案
核心结论:旧版Server Key无法用于FCM v1 API
FCM的v1版本API和旧版Legacy API(如https://fcm.googleapis.com/fcm/send)的认证机制完全不同:
- 旧版Legacy API使用Firebase控制台生成的「Server Key」/「Legacy Server Key」;
- v1 API必须使用OAuth 2.0访问令牌,该令牌需要通过Firebase服务账号的JSON密钥文件生成,旧Server Key在v1接口上完全无效。
所以你不是需要换Server Key,而是必须切换到v1 API对应的认证方式,或者退回旧版API继续使用原密钥。
你的代码里还有两个关键错误
请求路径格式错误:
你当前的路径https://fcm.googleapis.com/v1/projects/projects/messages:send存在重复的projects字段,正确格式应为:https://fcm.googleapis.com/v1/projects/[你的Firebase项目ID]/messages:send需将重复部分替换为实际的项目ID。
请求体结构不符合v1要求:
v1 API的请求体必须包裹在message字段内,而你当前的结构是旧版Legacy API的格式,示例正确结构:{ "message": { "token": "目标设备FCM令牌", "data": { "command": "你的指令内容" } } }
两种可行修复方案
方案1:切换到v1 API的正确认证流程
- 从Firebase控制台下载服务账号JSON密钥(路径:项目设置→服务账号→生成新私钥);
- 使用Google的
google/apiclient库生成OAuth 2.0访问令牌; - 将请求头改为
Authorization: Bearer [生成的令牌]; - 调整请求体为v1要求的结构。
方案2:退回旧版Legacy API
将请求路径改回旧版地址https://fcm.googleapis.com/fcm/send,保持原Server Key和请求体结构不变,即可正常发送通知。
内容的提问来源于stack exchange,提问作者Jitu
相关产品推荐
相关产品推荐

