我在我的iOS应用中实现聊天逻辑1-1。我正在使用Firebase将聊天和消息存储在聊天中。消息工作得很好。但我在聊天列表中遇到了一些困难。 我保存聊天记录的结构看起来像这样与Swift和Firebase聊天应用逻辑
-Users
--UserID
---chatrooms
----chatroomID
-----updatedTime
-----deleted
-----read
-----receiverID
-----receiverName
我在存储NSUserDefaults的NSDate的价值“chatsLoadedTime”。我通过发送查询查询聊天记录:
var time: String?
if defaults.valueForKey("chatsLoadedTime") != nil {
time = "\(defaults.valueForKey("chatsLoadedTime") as! NSDate)"
}
chatsRef.queryOrderedByChild("createdTime").queryStartingAtValue(time).observeEventType(.Value, withBlock: { snap in
defaults.setValue(toLocalTime(NSDate()), forKey: "chatsLoadedTime")
and so on
.
.
.
至于我可以看到它是存储聊天和能够从不同的设备下载聊天的好方法。例如,我刚刚安装了应用程序,我的chatsLoadedTime值为零,然后我下载了所有聊天记录,并将此值更新为当前日期时间。如果创建了新的聊天,那么它的createdTime会比我的chatsLoadedTime值更大,然后应用程序会下载它。
但是我不知道如何实现一个好的,有效的方式来删除聊天。我想要这个逻辑:如果user1删除聊天,那么他只需将其值删除= true即可。如果第二位用户也在他身边删除此聊天,那么聊天和消息将从应用中完全删除。如果user1删除了聊天,但是user2不是,那么如果user2写入user1,那么user1会收到此消息以及之前的所有消息,因为消息未被删除。但也许这不是最好的逻辑。给m,请建议如何以最好的方式做到这一点。
如果我可以,我想查询多个值,但据我所知这是不可能的。
看来,一切工作正如你想要的除了删除?您可以在每个用户ID中添加一个deletedChats节点。删除聊天时,请将chatroomID:true写入每个用户的UserId/deletedChat节点。当其他用户删除聊天时,请查询该聊天室节点是否存在,然后完全删除该聊天。如果没有,然后设置chatroomID:true – Jay
它似乎很长。如果用户1删除聊天,但用户2写入用户1,会怎么样?然后我需要发送查询,接收快照,检查user2是否有一个deletedChat节点。如果他有,那么我必须删除这个节点,如果没有,那就写。 –
也许我已经创建了解决方案。我会稍后回答:) –