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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ionic

Ionicは、クロスプラットフォームに対応したモバイルアプリ開発のためのオープンソースUIフレームワークです。iOSやAndroid、Webのアプリケーションを1つのコードベースで開発できます。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

2402閲覧

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

figalo66

総合スコア7

Ionic

Ionicは、クロスプラットフォームに対応したモバイルアプリ開発のためのオープンソースUIフレームワークです。iOSやAndroid、Webのアプリケーションを1つのコードベースで開発できます。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2018/02/13 04:30

編集2018/02/13 04:31

前提・実現したいこと

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に紐づいたものを監視していますので、特に問題はありません。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

投稿2018/03/19 07:50

rdlabo

総合スコア448

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

figalo66

2018/04/09 03:19

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問