Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

【第3回】何人が何十回やってるか分からないが、それでも俺はFirebaseでチャットアプリを作りたい

More than 1 year has passed since last update.

前回の内容

【第2回】何人が何十回やってるか分からないが、それでも俺はFirebaseでチャットアプリを作りたい

今回の内容

チャット機能を作っていきます!
第3回.gif

ゴールはこんな感じです!
では作っていきます!

メッセージ一覧の取得

と言ってもやることは前回とほぼ変わりません。

val query = db.collection("rooms").document(room).collection("talks")
                .orderBy("sendTime")

"rooms"Collectionの中からDocumentIdを指定して、Documentへの参照を取得します。
そのDocumentのサブコレクション"talks"の参照をさらに取得し、orderByを使ってメッセージ送信時間でソートします。
前回同様FireStoreAdapterのサブクラスを作ってqueryを渡してSubscribeの準備は完了です。

※DocumentIdは部屋一覧画面から渡しています。チャット画面でクエリしてもいいと思いますが、せっかく部屋一覧でゲットしてるので使いまわした方がいいかなと思ったのとなるべくクエリ回数を減らすためにこのように実装しています。もっといい方法をご存知の方いたら教えてくださいm(_ _)m

メッセージの送信

前回実装した部屋の追加と同じです。

val message = binding.messageEdit.text.toString()
val talk = Talk(Timestamp(Date()), message, userName)
db.collection("rooms").document(room)
                .collection("talks")
                .add(talk)

dataクラスのTalkに、タイムスタンプとユーザーが入力したメッセージとメッセージを送信したユーザーの名前を入れて"talks"Collectionに追加しています。

所感

全体的にあっさりし過ぎてる感あるなと思いました。Firebaseって簡単に使えるんだなと思っていただけると嬉しいです。。。

andfactory
Smartphone Idea Companyとして、人々の生活に「&(アンド)」を届ける。
https://andfactory.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away