安卓端无自有后端、不使用Cloud Functions时如何获取Firebase Authentication注册用户
安卓端无额外成本拉取Firebase全量注册用户方案
Firebase 客户端 SDK 默认未开放批量拉取全部 Authentication 注册用户的接口,这是官方的安全设计,避免用户数据批量泄露。你可以通过同步用户公开数据到Firestore的方式实现需求,全程不需要Admin SDK、云函数,也不会产生额外成本,适配个人使用场景:
实现步骤
- 新增
users集合同步用户公开信息
你在安卓端的用户注册成功回调逻辑中,新增写入操作,将选择出借人/借款人需要展示的公开字段(如用户UID、昵称、邮箱、头像地址等)写入Firestore的users集合,文档ID直接用用户的Auth UID,方便后续关联查询。
安卓端Kotlin示例代码:
如果已经有存量注册用户,手动将存量用户的公开信息导入val currentUser = FirebaseAuth.getInstance().currentUser ?: return val publicUserInfo = mapOf( "uid" to currentUser.uid, "displayName" to currentUser.displayName, "email" to currentUser.email ) FirebaseFirestore.getInstance().collection("users") .document(currentUser.uid) .set(publicUserInfo)users集合即可,个人使用场景下用户量极少,操作成本很低。 - 配置Firestore安全规则
配置规则保证只有登录用户可以读取users集合的公开数据,同时只有用户本人可以修改自己的公开信息:rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{userId} { allow read: if request.auth != null; allow write: if request.auth != null && request.auth.uid == userId; } // 原有其他集合的安全规则保持不变即可 } } - 安卓端拉取全量用户列表
直接查询users集合全量文档即可拿到所有注册用户的公开信息,用于出借人/借款人选择器的数据源:FirebaseFirestore.getInstance().collection("users") .get() .addOnSuccessListener { querySnapshot -> val allUserList = mutableListOf<PublicUser>() for (doc in querySnapshot.documents) { val user = doc.toObject(PublicUser::class.java) user?.let { allUserList.add(it) } } // 将allUserList传给选择器组件渲染 } - 适配LoanRecord关联逻辑
存储LoanRecord时,lender、borrower字段直接存储对应用户的UID即可,后续需要展示详情时,再通过UID去users集合查询对应数据,和你预期的外键逻辑完全一致。
成本说明
该方案完全基于Firebase免费配额即可运行,Spark免费计划的Firestore每日提供5万次读配额,个人使用完全足够,不会产生任何额外费用。
内容的提问来源于stack exchange,提问作者Al Ryan Acain
相关产品推荐
相关产品推荐

