メインページにユーザーのリストがあり、そのうちの1人とチャットするチャネルを選択して開きたいのですが。
IDを使用するのが最善の方法であり、USERID1-USERID2のようなチャネルのアクセスを制御するかどうかを考えています。
もちろん、ユーザー2も同じチャネルを開くことができるので、もっと簡単に制御できるものを見つけたいと思います。
私を助けたい場合は、firebase url/arrayを使用したJavaScriptの例を教えてください。
ありがとうございました!
このような1対1のチャットルームを処理する一般的な方法は、ユーザーIDに基づいてルームURLを生成することです。すでに述べたように、これの問題は、どちらのユーザーもチャットを開始でき、どちらの場合も同じ部屋にいる必要があることです。
これを解決するには、複合キーでユーザーIDを辞書式順序で並べます。たとえば、IDの代わりにユーザー名を使用する場合:
var user1 = "Frank";
var user2 = "Eusthace";
var roomName = 'chat_'+(user1<user2 ? user1+'_'+user2 : user2+'_'+user1);
console.log(user1+', '+user2+' => '+ roomName);
user1 = "Eusthace";
user2 = "Frank";
var roomName = 'chat_'+(user1<user2 ? user1+'_'+user2 : user2+'_'+user1);
console.log(user1+', '+user2+' => '+ roomName);
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
フォローアップに関する一般的な質問は、現在のユーザーのチャットルームのリストを表示する方法です。上記のコードはそれに対処していません。 NoSQLデータベースでは一般的ですが、この使用例を可能にするためにデータモデルを拡張する必要があります。現在のユーザーのチャットルームのリストを表示する場合は、それを許可するようにデータをモデル化する必要があります。これを行う最も簡単な方法は、各ユーザーのチャットルームのリストをデータモデルに追加することです。
"userChatrooms" : {
"Frank" : {
"Eusthace_Frank": true
},
"Eusthace" : {
"Eusthace_Frank": true
}
}
典型的なデータベーススキーマでは、各チャネル/チャットグループには、一意の$ key(Firebaseによって作成)を持つ独自のノードがあります。どのユーザーが最初にチャネルを開いたかは関係ありませんが、ノード(および対応する$ key)が作成されたら、それをチャネルIDとして使用できます。
もちろんハッシュ/ MD5戦略はそれを行う別の方法ですが、その場合は「ルート」情報と$ keyを同じノードに保存する必要があります-これはIMOの複製です(Imに何かが欠けている場合を除く)。
Js-sha256モジュールでのハッシュは、フランク・ファン・プフェレンとエデュアルドの指示で私のために働きました。
import SHA256 from 'crypto-js/sha256'
let agentId = 312
let userId = 567
let chatHash = SHA256('agent:' + agentId + '_user:' + userId)