【发布时间】:2021-05-24 18:52:03
【问题描述】:
我目前在我的应用程序的一个特定屏幕中将一个侦听器附加到一个文档,它看起来像这样:
const statusHandler = () => {//logging if user is online.
var ref = firebase.database().ref(`users/${PersonalId}/onlineState`)
ref.on('value', function(snapshot){
ref.onDisconnect().set(false);
ref.set(true);
})
};
如果用户关闭应用或失去与互联网的连接,firebase 会将其 onlineState 设置为 false。
问题是,在我在另一个屏幕上使用以下功能注销后:
firebase.auth().signOut().then(() => {
// Sign-out successful.
}).catch((error) => {
console.log(error)
});
听者不停。 firebase 中应该更改为 false 的对象保持为 true,只有当我关闭应用程序并终止它时,它才会变为 false,因此我假设即使在我注销后 on() 侦听器也会继续运行。 我发现这真的很令人困惑,因为即使我注销了当前用户,因此理论上应该取消与 firebase 的连接,但数据库并没有真正“断开”并继续运行。
这不是我只有一个听众的问题,而是多个听众的问题。我试图找到一个关于如何一次取消订阅应用程序内所有听众的想法。
知道如何解决这个问题吗?
【问题讨论】:
-
除了 Shai 的回答,还要注意单个用户(甚至单个设备)可以有多个连接。试图填充所有这些信息会导致问题,这就是为什么 Firebase 文档中的解决方案为每个连接使用单独的子节点(请注意其中的
var con = myConnectionsRef.push();)。见firebase.google.com/docs/database/web/…
标签: javascript firebase react-native firebase-realtime-database firebase-authentication