iOSアプリケーションにチャットロジック1-1を実装しています。私はfirebaseを使ってチャットやメッセージをチャットに保存しています。メッセージはうまくいっています。しかし、チャットリストにはいくつかの問題があります。 保存されたチャットの私の構造は、私はNSUserDefaults NSDate値「chatsLoadedTime」に格納このSwiftとFirebaseを使用したチャットアプリケーションのロジック
-Users
--UserID
---chatrooms
----chatroomID
-----updatedTime
-----deleted
-----read
-----receiverID
-----receiverName
のように見えます。私は、送信クエリでチャットを照会:
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はmy chatsLoadedTimeの値より大きくなり、アプリはそれをダウンロードします。
しかし、チャットを削除するための効率的な方法を実装する方法はわかりません。私はこの論理を望んでいます:user1がチャットを削除した場合、彼は単に値を変更しました= deletedを削除しました。 2人目のユーザーがこのチャットを削除した場合、チャットとメッセージはアプリから完全に削除されます。 user1がチャットを削除してuser2を削除した場合、user2がuser1に書き込むと、user1はこのメッセージと前のすべてのメッセージを受信します。これはメッセージが削除されなかったためです。しかし、それは最高の論理ではないかもしれません。私に、最高のやり方でこれを行う方法をアドバイスしてください。
可能であれば、私は複数の値を照会したいと思いますが、私が知る限りそれは不可能です。
削除以外はすべてがうまくいっているようですね?各UserID内にdeletedChatsノードを追加できます。チャットが削除されたときに書き込みchatroomID:各ユーザーのUserId/deletedChatノードに適用されます。別のユーザーがチャットを削除すると、そのノードにchatroomIDが存在するかどうかを照会し、チャットを完全に削除します。そうでなければ、chatroomID:trueを設定してください。 – Jay
それは長くなるようです。 user1がチャットを削除した後、user2がuser1に書き込みを行うとどうなりますか?次に、クエリを送信し、スナップショットを受信し、user2にdeletedChatノードがあるかどうかを確認する必要があります。彼がしている場合は、私はこのノードを削除する必要がありますしない場合は、次に書き込みます。 –
おそらく私は解決策を作成しました。私は後で答えます: –