用户在Firebase中注销时如何停止侦听以获取聊天消息

时间:2019-07-10 06:34:29

标签: firebase react-native firebase-realtime-database react-native-gifted-chat

我正在使用Firebase实时数据库构建移动聊天应用程序,并对本机做出反应。 该应用程序始终在侦听来自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) {
:

我想让用户退出而不会出现该错误。

1 个答案:

答案 0 :(得分:1)

当用户离开聊天时,您应该删除监听器。您可以使用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) {
        ...
      }
}