我应该啥时候分离我的 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 监听器? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我应该啥时候检查互联网连接

Electron Renderer 进程:我啥时候应该清理 IPC 监听器

是否应该避免同时添加多个 Firestore 快照侦听器?

Firestore 收集侦听器大量读取

我啥时候应该使用一对一的关系?

为啥添加单个文档时,Firestore 侦听器会返回 .add 两次?