Firebase发布版构建中Firestore、Remote Config失效,权限被拒求助排查
问题:发布版Firestore与Remote Config权限异常,Debug正常
我的应用使用Cloud Firestore和Remote Config服务,Debug模式下一切正常,但从Play Store内部测试渠道安装的发布版无法正常运行。
已经把Play Console获取的发布版SHA-1密钥添加到Firebase应用配置里,Google OAuth登录恢复正常,但Firestore和Remote Config还是用不了,日志报错:
Stream closed with status: b1 {code=PERMISSION_DENIED...}
想问下是不是漏了什么配置,还有怎么获取发布版的应用日志,求排查思路,谢谢!
更新:规则与查询代码细节
Remote Config规则
允许已认证用户读取,未认证用户读取受限,仅开发者可写入
Firestore数据库规则
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /stories/{storyId}{ allow read, write: if resource.data.userId == request.auth.uid || request.resource.data.userId == request.auth.uid; match /sentences/{itemId}{ allow read, write: if request.auth != null; } } } }
数据查询代码
Firebase.auth.uid?.let { userId -> db.collection("stories") .whereEqualTo("userId", userId) .whereEqualTo("hasBookmarks", true) .orderBy("createdAt", Query.Direction.DESCENDING) .addSnapshotListener { value, e -> //结果处理代码 } }
排查解决思路
1. Firestore权限问题(核心原因)
你的Firestore规则里,stories集合的读取权限要求单个文档的userId等于当前用户uid,但你用的是带多条件的批量查询。Firestore的安全规则不会自动过滤不符合条件的文档,而是会校验整个查询是否完全符合规则约束——当前规则无法验证批量查询里的每个文档都满足userId匹配,直接返回权限拒绝。
修复规则
修改stories的读取规则,允许已认证用户执行带userId过滤的查询:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /stories/{storyId}{ // 写入规则保留原逻辑 allow write: if resource.data.userId == request.auth.uid || request.resource.data.userId == request.auth.uid; // 允许单个文档读取(对应直接获取单条story的场景) allow get: if request.auth != null && resource.data.userId == request.auth.uid; // 允许批量查询,但强制查询必须包含userId等于当前用户uid的条件 allow list: if request.auth != null && request.query.where("userId").isEqualTo(request.auth.uid); match /sentences/{itemId}{ allow read, write: if request.auth != null; } } } }
2. Remote Config排查点
从规则来看,Remote Config允许已认证用户读取,发布版异常可能是:
- 登录状态未同步:确认Google登录完成后,
Firebase.auth.currentUser是否已正确初始化,避免在用户未登录时请求Remote Config - 缓存问题:发布版可能缓存了旧配置,启动时调用
fetchAndActivate()强制拉取最新配置
3. 获取发布版日志的方法
- Firebase Crashlytics:集成后自动捕获崩溃和日志,直接在Firebase控制台查看
- ADB Logcat:用USB连接设备,执行命令
adb logcat -s FirebaseFirestore:V FirebaseRemoteConfig:V过滤相关日志(设备需开启USB调试) - 自定义日志导出:在应用里把关键日志写入本地文件,提供导出功能,或者上传到Firebase Storage
4. 其他可能的坑
- ProGuard/R8混淆:如果混淆了Firebase相关类,会导致功能异常,必须添加Firebase官方混淆规则到
proguard-rules.pro - SHA-1核对:再次确认Firebase控制台里的发布版SHA-1是Play Console里的应用签名证书SHA-1,不是上传证书的
- google-services.json:确保发布版用的是Firebase控制台下载的最新文件,里面包含正确的发布版SHA-1信息
内容的提问来源于stack exchange,提问作者Konstantin Konopko
相关产品推荐
相关产品推荐

