如何在Flutter中使用Firebase搭建游戏虚拟币系统
Flutter集成虚拟币积分体系的Firebase选型解答
正式落地所需的Firebase核心服务
- Firebase Authentication:必选基础服务,用来生成用户全局唯一身份标识,不管你用匿名登录、手机号登录还是第三方社交账号登录,Auth返回的UID是关联用户余额、游戏进度、收支流水的核心主键,是多端同步余额、精准识别用户身份的前提。
- Cloud Firestore:必选存储服务,用来持久化存储用户虚拟币余额、每一笔收支的流水记录、不同游戏进度对应的奖励规则配置、用户游戏进度快照等结构化数据,自带的原子递增操作、实时推送能力可以直接满足余额展示、余额变动实时同步的需求。
- Cloud Functions for Firebase:正式上线环境必选服务,是整个积分体系的防作弊核心。所有虚拟币发放、扣减的逻辑不能放在客户端实现,必须部署在云函数侧:客户端只负责上报游戏进度达成的事件,云函数收到请求后先校验用户进度是否真实满足奖励条件、有没有重复领取同一份奖励,校验通过后再原子更新用户余额、写入对应流水,从根源上避免客户端篡改数据、恶意刷币的问题。
- Firebase Security Rules:必选权限管控服务,配合Firestore实现最小权限控制,直接封禁客户端对用户余额字段的写权限,同时限制用户只能读取自己的余额、自己的收支流水,无权访问或修改其他用户的积分数据。
仅使用Firestore Collections是否能满足需求
这个要分场景判断:
如果只是做开发测试、课程作业、无商业化的个人Demo,仅用Firestore集合完全可以跑通完整流程:你可以创建
users根集合,以用户UID作为每个用户文档的ID,文档内存储coinBalance数值字段代表用户余额,再给每个用户文档挂载coinLogs子集合存储每一笔收支的金额、来源、时间,客户端检测到游戏进度提升时,直接调用FieldValue.increment()原子更新余额,同时写入对应流水记录即可,不需要额外接入其他服务就能跑通全流程。
但如果是要正式上架、面向真实用户运营的版本,仅用Firestore完全不足以支撑需求,核心硬伤有三个:
- 防作弊能力为0:所有余额更新逻辑运行在客户端,不管你做多少代码混淆,有基础逆向能力的用户只要修改安装包、抓包篡改请求就能无限刷虚拟币,没有任何拦截手段。
- 奖励发放合法性无法校验:就算你用了Firestore的原子递增操作避免并发写覆盖,Firestore本身也不会校验这次余额变动对应的奖励是否真的符合发放规则——比如用户根本没通关,直接发个更新余额的请求,Firestore会正常执行修改,根本不会判断前置条件是否满足。
- 缺乏对账审计能力:所有流水都由客户端写入,一旦出现错账、刷币问题,你根本无法区分哪些流水是正常业务生成、哪些是恶意伪造的,连问题排查的依据都没有。
内容的提问来源于stack exchange,提问作者faccio
相关产品推荐
相关产品推荐

