【问题标题】:Listen to any new document added to a collection in firestore收听添加到 firestore 集合中的任何新文档
【发布时间】:2019-10-14 14:20:02
【问题描述】:

现有的解决方案对我不起作用,我已经尝试过了。我要做的是在存储在 Firestore 上的线程中获取消息。这是 Chat 集合的当前结构:

正如您所见,用户 1 和用户 2 之间的聊天只有 2 条消息,我正在尝试获取这些消息,并且如果将它们添加到线程中,还会收听新消息。这是我如何做的代码:

func loadChat() {

    self.showWaitOverlayWithText("Loading")
    let db = Firestore.firestore().collection("Chats")
        .whereField("user1ID", isEqualTo: Auth.auth().currentUser?.uid ?? "Not Found User 1")
        .whereField("user2UID", isEqualTo: user2UID ?? "Not Found User 2")

    db.getDocuments { (querySnap, error) in
        if let error = error {
            print("Error: \(error)")
            return
        } else {
            let doc = querySnap?.documents.first

           doc?.reference.collection("thread").addSnapshotListener(includeMetadataChanges: true, listener: { (threadQuery, error) in
                //Never comes here
                for message in threadQuery!.documents {
                    self.removeAllOverlays()
                    print("Data: \(message.data())")
                }
            })
        }
    }
}

它从不执行collection("thread").addSnapshotListner

【问题讨论】:

  • 打印错误吗?也就是进入条件语句的第一个场景(if let error = error {
  • 不,它永远不会执行addSnapShotListner 部分
  • 好的,所以问题是let doc = querySnap?.documents.first 正在返回nil。或者,类似地,querySnap 等于 nil
  • 发现了一个愚蠢的错误,键名是User2ID 而不是User2UID
  • 如果是这样,那么问题出在let db = Firestore.firestore().collection("Chats").whereField("user1ID", isEqualTo: Auth.auth().currentUser?.uid ?? "Not Found User 1").whereField("user2UID", isEqualTo: user2UID ?? "Not Found User 2这一行。您能否检查一下 Auth.auth().currentUser?.uiduser2UID 以确保两者都不是 nil 并且它们是与您的数据库匹配的字符串?

标签: swift firebase google-cloud-firestore


【解决方案1】:

因此,问题只是查询中的键不正确,“user2UID”而不是“user2ID”。我们可以通过检查可选值(docquerySnap)是否为 nil 来查明这个问题。 doc 等于 nil,querySnap 不是,但它的文档计数等于零。这有助于我们知道问题出在线路上

let db = Firestore.firestore().collection("Chats")
       .whereField("user1ID", isEqualTo: Auth.auth().currentUser?.uid ?? "Not Found User 1")
       .whereField("user2UID", isEqualTo: user2UID ?? "Not Found User 2")

我最初认为问题是与后端的值而不是键不一致。 Chaundhry 再次查看确认密钥不正确。

【讨论】:

    猜你喜欢
    • 2019-09-07
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2018-05-21
    相关资源
    最近更新 更多