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

同一Firebase项目下如何从一个应用向另一应用发送推送通知

可行性结论

这个需求完全可以实现。你之前无法向同项目下另一应用推送的核心原因有两个:

  1. FCM的设备注册Token和单应用的唯一标识(Android包名、iOS Bundle ID、Web应用域名)强绑定,哪怕两个应用在同一个Firebase项目下,各自生成的Token也不通用,用Client端的Token往Admin应用推必然失败
  2. 客户端应用默认没有直接向其他应用发送推送的权限,且直接在客户端存放推送凭证会有严重的安全风险
具体实现步骤
  • 采集Admin端应用的有效FCM Token
    给Admin端应用接入对应平台的FCM SDK,完成初始化配置,确保Admin应用启动后可以正常获取到归属自身应用标识的FCM设备Token,将这些Token和对应的管理员账号做关联映射,存储在业务数据库中。注意不要混用Client端生成的Token,Token归属应用和目标应用不匹配时,FCM接口会直接返回无效Token错误。
  • 搭建服务端中转逻辑(强制要求,禁止跳过)
    绝对不要把Firebase服务端密钥、服务账号私钥打包到Client客户端安装包内,这类凭证很容易被反编译窃取,导致整个项目的推送权限被恶意盗用。你需要部署一个简单的业务后端处理推送逻辑:
    1. 进入Firebase控制台的项目设置-服务账号页面,生成服务账号私钥,存储在业务后端服务器,禁止对外暴露
    2. 给Client端开放一个业务接口,客户端触发需要通知管理员的场景时,只需要将通知内容、目标管理员标识传递给该接口即可,客户端不需要接触任何FCM鉴权凭证
    3. 后端收到客户端请求后,先做合法性校验:确认发起请求的用户处于登录状态、具备对应操作权限,再从数据库取出目标管理员绑定的Admin端应用FCM Token
  • 调用FCM接口发送推送
    后端拿到合法的Admin端Token后,先通过存储的服务账号私钥生成OAuth2.0鉴权令牌,再调用FCM HTTP v1接口构造推送请求。请求不需要额外配置跨应用相关的特殊参数,只要token字段填入的是Admin端生成的有效Token,FCM会自动将消息路由到同项目下对应的Admin应用。
    参考请求体结构:
    {
      "message": {
        "token": "Admin端生成的有效FCM设备Token",
        "notification": {
          "title": "新客户端提交申请",
          "body": "有用户提交了待审核的操作请求"
        },
        "data": {
          "bizId": "10086",
          "type": "audit_request"
        }
      }
    }
    
  • 常见失败排查
    • 返回InvalidRegistration/NotRegistered错误:使用的Token不属于Admin端应用,或Token已过期失效,需要重新获取Admin端最新的有效Token
    • 返回权限类错误:检查后端使用的服务账号是否开启了FCM消息发送权限,不要使用客户端侧的Web API Key做服务端推送鉴权
    • Admin端收不到通知:检查Admin端应用的通知权限是否开启、Android 8.0以上版本是否配置了正确的通知通道、应用前台通知接收回调是否正常实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:01:13