调用FCM API遇权限错误:cloudmessaging.messages.create权限被拒
Firebase API调用响应:{"error":{"code":403,"message":"Permission 'cloudmessaging.messages.create' denied on resource '//cloudresourcemanager.googleapis.com/projects/restaurant-b6abd' (or it may not exist).","status":"PERMISSION_DENIED","details":[{"@type":"type.googleapis.com/google.rpc.ErrorInfo","reason":"IAM_PERMISSION_DENIED","domain":"cloudresourcemanager.googleapis.com","metadata":{"resource":"projects/restaurant-b6abd","permission":"cloudmessaging.messages.create"}}]}}
问题本质
这个403错误的核心是:你调用FCM API时使用的身份凭证,没有cloudmessaging.messages.create权限,无法对restaurant-b6abd项目执行消息发送操作。
修复步骤
给身份凭证添加对应权限
- 登录Google Cloud控制台,找到
restaurant-b6abd项目 - 进入IAM与管理员 > IAM页面
- 定位到Laravel项目中使用的服务账号(或调用API的身份)
- 点击编辑按钮,给该账号添加Cloud Messaging Admin角色(该角色包含
cloudmessaging.messages.create权限),也可以单独添加这个权限 - 保存更改,等待几分钟让权限生效
- 登录Google Cloud控制台,找到
核对服务账号密钥
确认Laravel项目里配置的服务账号密钥文件,对应的是刚才添加了权限的账号,避免因用错密钥导致身份验证后权限不足。验证项目有效性
检查项目IDrestaurant-b6abd是否正确,同时确认该项目在Google Cloud控制台中存在且状态正常,排除项目不存在或被删除的情况。
权限说明
cloudmessaging.messages.create是发送FCM消息的必备权限,只有拥有该权限的身份凭证才能成功调用FCM发送接口。
内容的提问来源于stack exchange,提问作者Hatim Ghiyavadwala

