Firebase Cloud Firestore-初始化集合

时间:2018-10-06 02:24:21

标签: swift firebase google-cloud-firestore

我正在用Swift开发一个聊天应用程序,当用户第一次创建聊天室时,它显然在Firebase中还不存在。只有在创建第一条消息之前,所有内容都会累积。

我的应用首次加载时,在viewDidLoad()中,我正在此路径上设置对聊天的引用(请注意,它不存在):

  reference = db.collection("chatrooms").document("\(chatRoomId)").collection("thread").document("\(threadId)").collection("messages")

因此,当我在其下方添加快照侦听器,并且用户在线程上创建他的第一条消息时,该侦听器不会为所有人触发(我想无论如何,因为它不会为我触发)

我喜欢这样,一旦您添加了第一条消息,它就会创建上面的整个文档结构,但这意味着可能正在监视该线程(但是不太可能)的我的第一批用户不会收到该消息。

这是我要防范的罕见情况吗,还是我需要做类似的事情(伪代码)?

 IF (this collection doesn't exist yet) THEN
       CREATE GROUP/THREAD/EMPTY MESSAGE COLLECTION
        reference = db.collection("chatrooms").document("\(chatRoomId)").collection("thread").document("\(threadId)").collection("messages")
    ELSE
        reference = db.collection("chatrooms").document("\(chatRoomId)").collection("thread").document("\(threadId)").collection("messages")
 END

我想知道是否可以调用某种初始化程序来为我创建结构,但是仍然对其进行设置,以便我发送给集合的第一条消息会触发快照侦听器。

谢谢!

1 个答案:

答案 0 :(得分:3)

您在做什么是不必要的。创建集合不需要任何正式方法。当您第一次向其中写入文档时,集合便会存在。您可以在没有任何问题的空集合上进行侦听,即使在添加集合时仪表板中不可见该集合,也应调用侦听器。