iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

Android(Kotlin) で Firebase Firestore を使ってデータを取得するまで

今回は、Android(Kotlin) で Firestore を使ってデータを取得するまでの手順を簡単に紹介したいと思います🚀

前提条件

  • APIレベル16(Jelly Bean) 以降が対象
  • Gradle 4.1 以降
  • Jetpack(AndroidX) を使用
  • 新規 Firebase プロジェクト作成済み

手順

それでは、作業していきましょう👷‍♀️

  1. Firebase に Android アプリを登録する際に取得した google-services.jsonAndroid プロジェクトの app ディレクトリに入れます(フォルダのペインを Android から Project に変更してドラックアンドドロップ)。

  2. プロジェクトレベルの Gradle ファイルに、Google サービスプラグインを含めるために必要なルールと、maven リポジトリを組み込む必要があるそうです。

buildscript {

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
 maven {
            url "https://maven.google.com"
    }
  }

  dependencies {
    // ...

    // Add the following line:
    classpath 'com.google.gms:google-services:4.3.4'  // Google Services plugin
  }
}

allprojects {
  // ...

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
 maven {
            url "https://maven.google.com"
    }
    // ...
  }
}
  1. 次にアプリレベルの Gradle ファイルで、Google サービスのプラグインを適用させます。
apply plugin: 'com.android.application'
// Add the following line:
apply plugin: 'com.google.gms.google-services'  // Google Services plugin

android {
  // ...
}
  1. 同様に、アプリレベル Gradle ファイルに依存関係を宣言します。Firebase Android BoM を使用することで、BoM のバージョンを指定するだけで、Firebase ライブラリの全てのバージョンを管理することができるようになるそうです🧑‍🔧
dependencies {
    implementation platform('com.google.firebase:firebase-bom:26.1.0')
    implementation 'com.google.firebase:firebase-analytics-ktx'
    implementation 'com.google.firebase:firebase-firestore:21.2.1'
    compile 'com.android.support:multidex:1.0.1'
}
  1. 次に Sync now を実行して、Gradle ファイルの変更を同期します。これで Firestore が使えるようになりました。

  2. 実際に、Firestore を使ってみます。

val db = FirebaseFirestore.getInstance()
        db.collection("countries")
            .get()
            .addOnSuccessListener {
                val countries = it.toObjects(CountryItem::class.java)
                for (document in countries) {
                    Log.i("Hoge", "name: ${document.name}, description: ${document.description}")
                }
            }
            .addOnFailureListener {
                Log.w("Hoge", "Error getting documents.", it)
            }

//..

data class CountryItem(val name: String = "", val description: String = "")

toObjects を使用することで、SnapShot を簡単にオブジェクトに変換することができます。また、使用するクラスにはデフォルトコンストラクタが必要みたいです✍️

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com