收听添加到Firestore中的集合的任何新文档

时间:2019-10-14 14:20:02

标签: swift firebase google-cloud-firestore

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

enter image description here

如您所见,用户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

1 个答案:

答案 0 :(得分:0)

因此,问题仅仅是查询中的错误键“ user2UID”而不是“ user2ID”。通过检查可选值(docquerySnap)是否为nil,我们能够查明此问题。 doc等于nil,querySnap等于n,但是其文档计数等于零。这有助于我们知道问题出在线路上

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再看一次,确认密码不正确。