使用Swift和Firebase聊天应用程序逻辑

时间:2016-04-23 06:32:21

标签: ios swift firebase chat firebase-realtime-database

我正在iOS应用中实现聊天逻辑1-1。我正在使用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值为nil,然后我下载所有聊天并将此值更新为当前dateTime。如果创建了新聊天,那么其createdTime比我的chatsLoadedTime值更大,应用程序将下载它。

但我不知道如何实现删除聊天的好方法。我想要这个逻辑:如果user1删除了聊天,那么他只需更改他的值deleted = true。如果第二个用户也在他身边删除了这个聊天,那么聊天和消息将完全从应用中删除。如果user1删除了chat,但user2没有,那么如果user2写入user1,则user1会收到此消息以及之前的所有消息,因为消息未被删除。但也许这不是最好的逻辑。请给我一个建议如何以最好的方式做到这一点。

如果可以,我想查询多个值,但据我所知,这是不可能的。

1 个答案:

答案 0 :(得分:0)

我已为每个chatRoom添加了lastLoadedTime值。我已经为名为lastLoadedTime的设备添加了一个值。每当我从firebase接收快照时,我都会将updatedTime更新为当前时间。因此,我观察聊天,其中存储在设备上的时间值小于firebase中chatRoom中的1990-01-01 00:00:00。当我删除聊天时,我将更新时间设置为fa-play。所以在有人给我发消息之前我不会观察这个聊天。问我是否需要更多信息来理解:)