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

同一Firebase项目下开发两款Android应用的可行性与最优方案咨询

客户端-管理端审批系统实现方案及Firebase项目复用问题解答

一、客户端提交申请、管理端审批/驳回的最优实现方案

如果基于Firebase生态搭建,推荐以下务实的落地方案:

1. Firestore数据结构设计

用applications集合统一存储所有申请数据,单文档字段建议如下:

  • userId:提交申请的客户端用户ID(关联Firebase Auth的UID)
  • content:申请具体内容(比如JSON格式或字符串)
  • status:申请状态(pending待审批 / approved已通过 / rejected已驳回)
  • createTime:申请提交时间(用serverTimestamp()自动生成)
  • reviewerId:审批人ID(审批完成后填充)
  • reviewTime:审批完成时间(审批完成后填充)
  • reviewNote:审批备注(可选,比如驳回理由)

2. 核心业务逻辑

  • 客户端:调用Firestore的add()方法提交申请,默认将status设为pending,userId设为当前登录用户的UID
  • 管理端:
    • 监听applications集合中status = 'pending'的文档,实时获取待审批列表
    • 审批时调用update()方法,修改对应文档的status,同时填充reviewerId、reviewTime等字段
  • 后端兜底(可选):用Firebase Cloud Functions触发自动化逻辑,比如申请提交后给管理员发通知,审批完成后给申请人发结果通知

3. 权限控制(Firebase Security Rules)

必须通过规则严格隔离客户端和管理端的操作权限,示例规则如下:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /applications/{docId} {
      // 客户端用户:仅能创建自己的申请,仅能读取自己的所有申请
      allow create: if request.auth != null && request.resource.data.userId == request.auth.uid;
      allow read: if request.auth != null && resource.data.userId == request.auth.uid;
      
      // 管理端用户:需通过自定义Claims标记为管理员,仅能读取待审批申请,仅能更新审批相关字段
      allow read: if request.auth != null && request.auth.token.isAdmin == true && resource.data.status == 'pending';
      allow update: if request.auth != null && request.auth.token.isAdmin == true 
                    && request.resource.data.keys().hasOnly(['status', 'reviewerId', 'reviewTime', 'reviewNote']);
    }
  }
}

管理端用户的isAdmin标记可以通过Firebase Admin SDK在后台设置,示例代码:

// Node.js示例
admin.auth().setCustomUserClaims(adminUid, { isAdmin: true });

4. 实时通知(FCM)

用Firebase Cloud Messaging实现双向通知:

  • 客户端提交申请后,Cloud Functions触发FCM推送,通知管理端有新申请待处理
  • 管理端完成审批后,同样通过Cloud Functions触发FCM,通知对应客户端用户审批结果

二、同一Firebase项目下创建两款应用的问题

完全可以在同一个Firebase项目下创建客户端和管理端应用,不存在核心问题,反而有不少优势:

  • 共享同一套用户系统:用Firebase Auth统一管理两类用户,通过自定义Claims快速区分角色
  • 共享数据资源:无需跨项目同步申请数据,管理端直接操作同一份Firestore数据
  • 统一运维:在同一个Firebase控制台监控两款应用的流量、错误日志、资源使用情况

需要注意几个细节:

  • 应用标识区分:添加应用时,分别设置不同的包名(Android)或Bundle ID(iOS/Flutter),获取各自的配置文件(google-services.json或GoogleService-Info.plist)
  • 权限严格隔离:必须通过Security Rules和自定义Claims确保客户端用户无法访问管理端的操作权限,反之亦然
  • 资源配额共享:同一项目下的所有应用共享Firebase的资源配额(比如Firestore读写次数、FCM推送额度),如果两款应用流量都很大,需要提前关注配额是否满足需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:15:31