我应该啥时候分离我的 Firestore 监听器? [复制]
Posted
技术标签:
【中文标题】我应该啥时候分离我的 Firestore 监听器? [复制]【英文标题】:When should I detach my Firestore Listeners? [duplicate]我应该什么时候分离我的 Firestore 监听器? [复制] 【发布时间】:2021-12-31 00:31:37 【问题描述】:我一直在使用我的快照侦听器,并且在用户退出时似乎会导致冲突。祝酒词:
“PERMISSION_DENIED: Missing or Insufficient permissions.” 立即显示。
根据我对答案的研究,我必须在使用完它后立即将我的听众分开。它表示每当用户退出时,监听器(快照监听器)仍在后台工作,并且由于身份验证不再存在,它会显示上述 toast 消息。
片段:
主要活动.kt
private fun getRealTimeUpdates()
productsCollectionRef.addSnapshotListener snapshot, error ->
error?.let
Toast.makeText(this, error.message, Toast.LENGTH_SHORT).show()
return@addSnapshotListener
snapshot?.let
for(document in it)
suggestions.add(document["name"].toString())
//sign out
binding.tvSignOut.setOnClickListener
FirebaseAuth.getInstance().signOut()
Intent(this, LoginActivity::class.java).also
startActivity(it)
finish()
正如标题所示,我应该何时以及如何分离我的 firebase 监听器?什么时候用最好?
【问题讨论】:
检查一次您的数据库规则。您可能在那里阻止了请求。 【参考方案1】:您需要在注销用户之前断开您的监听器。
我构建了一个机制(从 Redux 商店扩展,虽然这不是绝对必要的),将我的听众注册为一个组(好吧,几个组,因为有几个子帐户)。当请求注销时,例程首先运行取消订阅,然后注销用户和/或子帐户。
有几种方法可以做到这一点,但净:
先登录,再添加监听器 跟踪您的听众 ... 取消订阅听众 注销我会看看我是否可以隔离一些代码(总的来说,我的系统是客户端、云和身份验证功能的相当复杂的组合)
【讨论】:
根据我的代码,我有一个函数可以通过 addSnapshotListener 获取实时更新。如果我从 getRealtimeUpdates 返回侦听器注册并在调用 auth.signout() 之前调用 getRealtimeUpdates().remove 会更好吗?【参考方案2】:allow read, write: if true;
您可以尝试在 Firestore 规则中输入此内容吗?或撤消最后的更改。
【讨论】:
不要这样做。这并不能解决问题,只是消除了安全性。以上是关于我应该啥时候分离我的 Firestore 监听器? [复制]的主要内容,如果未能解决你的问题,请参考以下文章