使用 Swift 和 Firebase 聊天应用程序逻辑
Chat app logic with Swift and Firebase
我正在我的 iOS 应用中实现聊天逻辑 1-1。我正在使用 firebase 在聊天中存储聊天和消息。消息工作得很好。但是我在聊天列表方面遇到了一些困难。
我的存储聊天结构如下所示
-Users
--UserID
---chatrooms
----chatroomID
-----updatedTime
-----deleted
-----read
-----receiverID
-----receiverName
我将 NSDate 值存储在 NSUserDefaults 中 "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,然后我下载所有聊天并将该值更新为当前日期时间。如果创建了新聊天,则其 createdTime 大于我的 chatsLoadedTime 值,应用程序将下载它。
但我不知道如何实现一个好的、高效的删除聊天的方法。我想要这个逻辑:如果 user1 删除聊天,那么他只需更改他的值 deleted=true。如果第二个用户也删除了他身边的这个聊天,那么聊天和消息将从应用程序中完全删除。如果 user1 删除了聊天,但 user2 没有,那么如果 user2 写信给 user1,那么 user1 会收到这条消息和所有以前的消息,因为消息没有被删除。但也许这不是最好的逻辑。给米,请指教如何以最好的方式做到这一点。
如果可以的话,我想查询多个值,但据我所知这是不可能的。
我已经为每个聊天室添加了 updatedTime
值。我已经为设备添加了一个名为 lastLoadedTime
的值。每次我从 firebase 收到快照时,我都会将 lastLoadedTime
更新为当前时间。因此,我观察到聊天,其中存储在设备上的时间值小于 firebase 的聊天室中的 updatedTime
。当我删除聊天时,我将更新时间设置为 1990-01-01 00:00:00
。所以在有人给我发消息之前我不会观察这个聊天。问我是否需要更多信息来理解:)
我正在我的 iOS 应用中实现聊天逻辑 1-1。我正在使用 firebase 在聊天中存储聊天和消息。消息工作得很好。但是我在聊天列表方面遇到了一些困难。 我的存储聊天结构如下所示
-Users
--UserID
---chatrooms
----chatroomID
-----updatedTime
-----deleted
-----read
-----receiverID
-----receiverName
我将 NSDate 值存储在 NSUserDefaults 中 "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,然后我下载所有聊天并将该值更新为当前日期时间。如果创建了新聊天,则其 createdTime 大于我的 chatsLoadedTime 值,应用程序将下载它。
但我不知道如何实现一个好的、高效的删除聊天的方法。我想要这个逻辑:如果 user1 删除聊天,那么他只需更改他的值 deleted=true。如果第二个用户也删除了他身边的这个聊天,那么聊天和消息将从应用程序中完全删除。如果 user1 删除了聊天,但 user2 没有,那么如果 user2 写信给 user1,那么 user1 会收到这条消息和所有以前的消息,因为消息没有被删除。但也许这不是最好的逻辑。给米,请指教如何以最好的方式做到这一点。
如果可以的话,我想查询多个值,但据我所知这是不可能的。
我已经为每个聊天室添加了 updatedTime
值。我已经为设备添加了一个名为 lastLoadedTime
的值。每次我从 firebase 收到快照时,我都会将 lastLoadedTime
更新为当前时间。因此,我观察到聊天,其中存储在设备上的时间值小于 firebase 的聊天室中的 updatedTime
。当我删除聊天时,我将更新时间设置为 1990-01-01 00:00:00
。所以在有人给我发消息之前我不会观察这个聊天。问我是否需要更多信息来理解:)