2016-04-23 54 views
3

我在我的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,請建議如何以最好的方式做到這一點。

如果我可以,我想查詢多個值,但據我所知這是不可能的。

+0

看來,一切工作正如你想要的除了刪除?您可以在每個用戶ID中添加一個deletedChats節點。刪除聊天時,請將chatroomID:true寫入每個用戶的UserId/deletedChat節點。當其他用戶刪除聊天時,請查詢該聊天室節點是否存在,然後完全刪除該聊天。如果沒有,然後設置chatroomID:true – Jay

+0

它似乎很長。如果用戶1刪除聊天,但用戶2寫入用戶1,會怎麼樣?然後我需要發送查詢,接收快照,檢查user2是否有一個deletedChat節點。如果他有,那麼我必須刪除這個節點,如果沒有,那就寫。 –

+0

也許我已經創建瞭解決方案。我會稍後回答:) –

回答

0

我已將updatedTime值添加到每個聊天室。我爲設備添加了一個值lastLoadedTime。每次當我從Firebase收到快照時,我將lastLoadedTime更新爲當前時間。因此,我觀察到聊天記錄,其中存儲在設備上的時間值小於在火力點聊天室中的updatedTime。當我刪除聊天時,我將更新時間設置爲1990-01-01 00:00:00。所以我不會觀察這個聊天,直到有人給我發送消息。問我是否需要更多的信息來了解:)

+0

你可以嗎?在你的答案中分享你的代碼?會很棒! – MJQZ1347