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

Firebase Cloud Messaging云构建部署应用权限错误求解

问题解决步骤
  • 第一步:确认运行环境的服务账号,权限授予到正确账号
    无参初始化FirebaseApp时默认使用当前云资源的运行时默认服务账号,而非Cloud Build的构建账号:
    • 若部署在Cloud Run:默认账号为 <PROJECT_NUMBER>-compute@developer.gserviceaccount.com
    • 若部署在App Engine:默认账号为 <PROJECT_ID>@appspot.gserviceaccount.com
      你之前授予权限的账号必须和上述运行时账号完全一致,权限才会生效。
  • 第二步:确认Cloud Messaging API已启用
    登录GCP控制台进入「API和服务」页面,搜索Cloud Messaging API,确认该API已在你的项目中启用,未启用的API也会触发403权限错误。
  • 第三步:优化Firebase初始化代码,避免环境变量读取异常
    无参初始化依赖默认环境变量自动识别,建议显式指定应用默认凭证(ADC)和项目ID,代码修改为:
    try {
      FirebaseOptions options = FirebaseOptions.builder()
        // 自动读取运行环境的默认凭证,无需手动加载密钥文件
        .setCredentials(GoogleCredentials.getApplicationDefault())
        // 显式读取环境变量传入的项目ID,避免识别失败
        .setProjectId(System.getenv("GOOGLE_CLOUD_PROJECT"))
        .build();
      if (FirebaseApp.getApps().isEmpty()) {
        FirebaseApp.initializeApp(options);
        logger.info("Firebase application has been initialized");
      }
    } catch (IOException e) {
      logger.error("Firebase初始化失败", e);
    }
    
  • 第四步:确认权限配置生效
    IAM权限配置修改后最多需要5分钟生效,确认你授予的Firebase Cloud Messaging Admin角色确实包含cloudmessaging.messages.create权限,也可临时授予Editor角色测试,排查是否是权限范围不足的问题。
  • 可选安全方案:敏感密钥托管
    如果你不想使用默认服务账号,可将Firebase服务账号JSON密钥存入GCP Secret Manager,部署时将密钥挂载为容器的环境变量或临时文件,代码中根据运行环境判断读取路径,既不会泄露密钥到代码仓库,也能使用固定的服务账号权限。

内容的提问来源于stack exchange,提问作者Miłosz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:06:04