使用Axios调用Firebase Cloud Messaging HTTP v1 API遇404错误求助
解决Axios调用FCM API返回404“请求实体未找到”的问题
核心排查方向
- 确认项目ID正确性:替换URL中的
<Project ID>为Firebase控制台项目设置里的实际项目ID(不是项目名称),项目ID格式为小写字母、数字加连字符,比如my-app-12345。 - 检查端点格式:FCM v1 API的正确端点是
https://fcm.googleapis.com/v1/projects/{project-id}/messages:send,确保:send后缀没有遗漏或写错(比如误写为/messages/send会直接返回404)。 - 验证Access Token有效性:
- 确保
accessToken是通过Firebase服务账号密钥生成的,且拥有firebase.messaging.send权限。 - 可以用curl直接测试token和端点是否正常:
curl -H "Authorization: Bearer 你的AccessToken" https://fcm.googleapis.com/v1/projects/你的项目ID/messages:send -d '{"message":{"token":"你的设备令牌","notification":{"title":"Test","body":"Test Content"}}}' -H "Content-Type: application/json" - 如果curl请求成功,说明问题出在Axios代码或环境;如果curl也返回404,优先排查项目ID和token的有效性。
- 确保
- 简化请求头:Axios 1.7.7会自动为JSON请求设置
Content-Type: application/json,可以尝试去掉手动设置的该头,避免潜在的格式冲突。 - 排查网络环境:如果使用代理服务器,可能会修改请求URL导致404,建议用Postman或本地环境直接发送请求,排除网络拦截问题。
修正后的Axios示例代码
try { const response = await axios.post( 'https://fcm.googleapis.com/v1/projects/your-real-project-id/messages:send', { message: { token: 'valid-device-token', notification: { body: '测试消息内容', title: '测试标题', }, } }, { headers: { 'Authorization': `Bearer ${accessToken}`, }, }, ); console.log('请求成功:', response.data); } catch (err) { console.error('请求失败详情:', err.response?.data || err.message); }
内容的提问来源于stack exchange,提问作者user3534309
相关产品推荐
相关产品推荐

