2017-12-23 56 views
1

Firebaseを使用してアプリケーションを構築しています。このアプリの特徴の1つはチャット機能で、ユーザーは他のユーザーにメッセージを送ることができます。ファンシーではなく、テキストベースの1人のユーザーから1人のユーザーメッセージングまでです。 this onethis oneなどの実装方法を説明しているオンラインのチュートリアルはすべて匿名認証を使用しているため、多くの原則が適用されないようです。この機能を使用する前に、ユーザーに認証を依頼しています。Firebaseのメッセージングアプリケーションのデータベース構造

私が自由に使える2つの主な機能は、アプリケーションのJSONデータベース構造内の特定のパス(追加、編集、削除、変更順序)の内容を変更し、クライアント側でこれらの変更を観察できることです彼らが起こるように。私は簡単にすべてのメッセージを同じ子に置き、メッセージの子に何か変更を聞き、現在のユーザーIDに関連付けられたメッセージを探すことで、すべてのメッセージをクライアント側の会話に解析します。しかし、この方法は、余分なメッセージをたくさんフィルタリングしなければならないように思えるので、非効率的です。

観測構造の一般的な流れ、各メッセージに含める必要があるもの、別々の会話に効率的に並べ替える方法は非常に役に立ちます。

答えて

0

ほとんどのチャットアプリは、チャットルームの概念、直接会話のための1:1ルーム、またはユーザーグループ間の名前付きルームのいずれかで動作します。ルームIDの下で、その部屋の(ちょうど)のメッセージを使用して、データベース内のノードとして

あなたのモデルリーチルーム:

chatrooms 
    roomdid1: 
    msg1: { from: ..., text: ..., timestamp: ... } 
    msg2: { from: ..., text: ..., timestamp: ... } 
    msg3: { from: ..., text: ..., timestamp: ... } 
    roomdid2: 
    msg4: { from: ..., text: ..., timestamp: ... } 
    msg5: { from: ..., text: ..., timestamp: ... } 
    msg6: { from: ..., text: ..., timestamp: ... } 

は部屋のためにメッセージをロードするには、あなただけ、その部屋に耳を傾けます例えば/chatrooms/roomid1

客室内のユーザーの名前付け規則に関するアイデアについては、http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-channels-in-firebaseを参照してください。

+0

ガイダンスのおかげで、これは非常に役に立ちます。私の唯一の考えは、すべてのチャットルームを手動で解析し、チャットルームIDに基づいてユーザーが1人いるかどうかを確認することが非常に遅いことです。チャットルームIDだけを含む別のノードを作成し、代わりにそれを検索するとよいでしょうか? –

+0

それは本当に悪い考えです。あなたは通常、UIDによって各ユーザーの部屋のリストを取得します。 '/ userrooms/$ uid/roomid1:true'、'/usersrooms/$ uid/roomid2:true'などです。 –

関連する問題