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

前端之家收集整理的这篇文章主要介绍了ios – 使用Swift和Firebase聊天应用程序逻辑前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在我的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会收到此消息以及之前的所有消息,因为消息未被删除.但也许这不是最好的逻辑.给m,请以最好的方式建议如何做到这一点.

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

解决方法

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

猜你在找的iOS相关文章