我正在用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
我想知道是否可以调用某种初始化程序来为我创建结构,但是仍然对其进行设置,以便我发送给集合的第一条消息会触发快照侦听器。
谢谢!
答案 0 :(得分:3)
您在做什么是不必要的。创建集合不需要任何正式方法。当您第一次向其中写入文档时,集合便会存在。您可以在没有任何问题的空集合上进行侦听,即使在添加集合时仪表板中不可见该集合,也应调用侦听器。