当用户退出 firebase 时如何停止收听获取聊天消息
How to stop listening for fetching chat messages when users sign out in firebase
我正在使用 firebase 实时数据库和 React Native 构建移动聊天应用程序。
此应用程序一直在侦听从 firebase 数据库中获取新的聊天消息。
但是当我在聊天屏幕上单击 sign out
按钮时,我看到了以下错误消息,因为后台的应用程序总是尝试获取新消息,即使我已经注销并且我没有角色读写聊天消息。
这是错误信息。
console.error: "Uncaught Error in onSnapshot:", {"code": "permission-denied", "name": "FirebaseError" }
这是我用来监听获取新聊天消息的代码。
:
this.firebase.firestore.collection("chat").doc(" chatId").collection("messages")
.where('counter', '>', this_.messageCounter - Const.chatPagingMessageCount).orderBy('counter', 'asc')
.onSnapshot(function (querySnapshot) {
:
我想让用户退出时不会出现该错误。
当用户离开聊天时,您应该删除侦听器。您可以使用 componentWillUnmount 生命周期方法或退出操作。
https://firebase.google.com/docs/firestore/query-data/listen#detach_a_listener
componentDidMount () {
this._listenToMessages();
}
componentWillUnmount () {
this.chatListener();
}
_listenToMessages = () => {
this.chatListener =
this.firebase.firestore.collection("chat").doc("chatId").collection("messages")
.where('counter', '>', this_.messageCounter -
Const.chatPagingMessageCount).orderBy('counter', 'asc')
.onSnapshot(function (querySnapshot) {
...
}
}
我正在使用 firebase 实时数据库和 React Native 构建移动聊天应用程序。 此应用程序一直在侦听从 firebase 数据库中获取新的聊天消息。
但是当我在聊天屏幕上单击 sign out
按钮时,我看到了以下错误消息,因为后台的应用程序总是尝试获取新消息,即使我已经注销并且我没有角色读写聊天消息。
这是错误信息。
console.error: "Uncaught Error in onSnapshot:", {"code": "permission-denied", "name": "FirebaseError" }
这是我用来监听获取新聊天消息的代码。
:
this.firebase.firestore.collection("chat").doc(" chatId").collection("messages")
.where('counter', '>', this_.messageCounter - Const.chatPagingMessageCount).orderBy('counter', 'asc')
.onSnapshot(function (querySnapshot) {
:
我想让用户退出时不会出现该错误。
当用户离开聊天时,您应该删除侦听器。您可以使用 componentWillUnmount 生命周期方法或退出操作。
https://firebase.google.com/docs/firestore/query-data/listen#detach_a_listener
componentDidMount () {
this._listenToMessages();
}
componentWillUnmount () {
this.chatListener();
}
_listenToMessages = () => {
this.chatListener =
this.firebase.firestore.collection("chat").doc("chatId").collection("messages")
.where('counter', '>', this_.messageCounter -
Const.chatPagingMessageCount).orderBy('counter', 'asc')
.onSnapshot(function (querySnapshot) {
...
}
}