質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.05%

チャットアプリ、トークルームの問題点

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,672

score 7

 前提・実現したいこと

ionicで、チャットアプリを作ってます。
typescript、htmlを使ってます。

データベースは、firebaseのものを使ってます。

トークルーム、トークルームリストのページを作ってます。
LINEのようなイメージです。

DB設計は以下の通りです
firebaseの場合はツリー構造上になってます。
message(メッセージごとにmessageidが付与され随時ここに追加される)
|-messageid -|from
|                  |to
|                  |text
|                  |roomid
.
.   
|
room(トークルームごとにroomidが付与され随時追加される)
|-roomid-|-member-|-memberid1
|                           |-memberid2
|
.
.
user
|-userid-|-name
|           |-birthday
|           |-room-|-roomid1(参加しているトークルームのid)
|                      |-roomid2

トークルームリストは、user/userid/room以下をフェッチし、
参加しているトークルームを取得して表示します。

トークルーム内では、message以下を見て、現在表示しているトークルームのroomidに紐づいたメッセージを
取得し表示します。

 発生している問題

roomidを新規に生成するタイミングで困ってます。

チャット機能の処理フローは以下です。

友達リストの中から、メッセージする相手を選ぶ

既にトークしている相手?既にroomidある?
↓YES                               ↓NO
roomid取得と同時に            トークルーム画面に遷移(この時点でまだroomid無)
トークルーム画面に遷移
↓                    ↓
messageノード以下を監視し
roomidに紐づけられた       新規メッセージ送信時にroomidを生成
メッセージがあれば
DBからデータを取得し
画面表示

以下のケースで、どういった処理をしたらいいのかわかりません。

userAとuserBがいたとします。
このユーザ達のトークルームはまだありません。

userAは、友達リストの中からuserBを選択し、メッセージ画面に遷移します。
userBも、userAを選択し、メッセージ画面に遷移します。

ここで、双方が同じタイミングでメッセージを送信します。
現状だと、同じメンバーなのに、roomidが異なるトークルームが2つできてしまいます。

自分が送信したい相手とのトークルーム画面にいる際に、相手からメッセージがきた場合、どういった処理
をしたらいいのかわかりません。

もともとroomidがあるユーザ同士のトークルーム画面では、message以下のroomidに紐づいたものを監視していますので、特に問題はありません。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

一番コストが低いのは、トークルームを作成する時に「トークルームを作成しますか?」とユーザに尋ねるフローを入れることです。そうすると、同一ユーザでトークルームが2つできることは問題になりません(メッセージ機能ではなくトークルームですので)

厳密に運用しないと!ということでしたら「新規メッセージ送信時にroomidを生成」する時に、「すでに同一トークルームがあれば、既存roomidを利用」「なければ新規作成」と判定を入れる形になります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/09 12:19

    なるほど!ありがとうございます。
    「すでに同一トークルームがあれば」の判定は、「トークルームのメンバー情報に、送信者と受信者がいるか」を見ればできそですね!ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る