【问题标题】:How to stop listening for fetching chat messages when users sign out in firebase当用户在firebase中注销时如何停止监听获取聊天消息
【发布时间】:2019-11-19 17:21:48
【问题描述】:

我正在使用 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) {
:

我想让用户在没有该错误的情况下退出。

【问题讨论】:

  • 你在使用 redux 和 react-native-firebase 吗?
  • @Hazim Ali 不,我没有同时使用,我只使用 firebase 模块。

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


【解决方案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) {
        ...
      }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多