アプリを Firebase に接続する

まだ追加していない場合は、Firebase を Android プロジェクトに追加します

データベースを作成する

  1. Firebase コンソールの [Realtime Database] セクションに移動します。既存の Firebase プロジェクトを選択するよう求められます。データベース作成ワークフローに従います。

  2. Firebase Security Rules の開始モードを選択します。

    テストモード

    モバイルおよびウェブ クライアント ライブラリを使用する場合に適していますが、すべてのユーザーがデータを読み取り、上書きできます。テストが終わったら、Firebase Realtime Database セキュリティ ルールを理解するを確認してください。

    Web SDK、Apple SDK、Android SDK を使用する場合は、テストモードを選択します。

    ロックモード

    モバイルおよびウェブ クライアントからのすべての読み書きを拒否します。認証されたアプリケーション サーバーは引き続きデータベースにアクセスできます。

  3. データベースのロケーションを選択します。

    データベースのロケーションに応じて、新しいデータベースの URL は次のいずれかの形式になります。

    • DATABASE_NAME.firebaseio.comus-central1 のデータベースの場合)

    • DATABASE_NAME.REGION.firebasedatabase.app(他のすべてのロケーションのデータベースの場合)

  4. [完了] をクリックします。

Realtime Database を有効にすると、Cloud API Manager で API も有効になります。

アプリに Realtime Database SDK を追加する

モジュール(アプリレベル)の Gradle ファイル(通常は <project>/<app-module>/build.gradle.kts または <project>/<app-module>/build.gradle)に、Android 用 Realtime Database ライブラリの依存関係を追加します。ライブラリのバージョニングの制御には、Firebase Android BoM を使用することをおすすめします。

dependencies {
    // Import the BoM for the Firebase platform
    implementation(platform("com.google.firebase:firebase-bom:33.6.0"))

    // Add the dependency for the Realtime Database library
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation("com.google.firebase:firebase-database")
}

Firebase Android BoM を使用すると、アプリは常に互換性のあるバージョンの Firebase Android ライブラリを使用します。

(代替方法)BoM を使用せずに Firebase ライブラリの依存関係を追加する

Firebase BoM を使用しない場合は、依存関係の行でそれぞれの Firebase ライブラリのバージョンを指定する必要があります。

アプリで複数の Firebase ライブラリを使用する場合は、すべてのバージョンの互換性を確保するため、BoM を使用してライブラリのバージョンを管理することを強くおすすめします。

dependencies {
    // Add the dependency for the Realtime Database library
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation("com.google.firebase:firebase-database:21.0.0")
}
Kotlin 固有のライブラリ モジュールをお探しの場合、 2023 年 10 月(Firebase BoM 32.5.0)以降、Kotlin と Java のどちらのデベロッパーもメイン ライブラリ モジュールを利用できるようになります(詳しくは、このイニシアチブに関するよくある質問をご覧ください)。

Realtime Database Security Rules の設定

Realtime Database には宣言型のルール言語が用意されているため、データの構造化方法、インデックスの作成方法、データの書き込みと読み取りの許可を定義できます。

データベースに書き込む

getInstance() を使用してデータベースのインスタンスを取得し、書き込み先の場所を参照します。

Kotlin+KTX

// Write a message to the database
val database = Firebase.database
val myRef = database.getReference("message")

myRef.setValue("Hello, World!")

Java

// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");

myRef.setValue("Hello, World!");

このように、Java オブジェクトを含むさまざまなデータ型をデータベースに保存できます。オブジェクトを保存すると、ゲッターからのレスポンスはこの場所の子として保存されます。

データベースから読み込む

アプリデータをリアルタイムで更新するには、作成した参照に ValueEventListener を追加する必要があります。

このクラス内の onDataChange() メソッドはリスナーがアタッチされたときに 1 回トリガーされます。さらに、データ(子も含む)が変更されると、そのたびに再びトリガーされます。

Kotlin+KTX

// Read from the database
myRef.addValueEventListener(object : ValueEventListener {
    override fun onDataChange(dataSnapshot: DataSnapshot) {
        // This method is called once with the initial value and again
        // whenever data at this location is updated.
        val value = dataSnapshot.getValue<String>()
        Log.d(TAG, "Value is: $value")
    }

    override fun onCancelled(error: DatabaseError) {
        // Failed to read value
        Log.w(TAG, "Failed to read value.", error.toException())
    }
})

Java

// Read from the database
myRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        // This method is called once with the initial value and again
        // whenever data at this location is updated.
        String value = dataSnapshot.getValue(String.class);
        Log.d(TAG, "Value is: " + value);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        // Failed to read value
        Log.w(TAG, "Failed to read value.", error.toException());
    }
});

ProGuard を構成する(省略可)

アプリで ProGuard とともに Firebase Realtime Database を使用する場合、難読化後にモデル オブジェクトをどのようにシリアル化および逆シリアル化するかを検討する必要があります。DataSnapshot.getValue(Class) または DatabaseReference.setValue(Object) を使用してデータの読み込みと書き込みを行うには、proguard-rules.pro ファイルにルールを追加する必要があります。

    # Add this global rule
    -keepattributes Signature

    # This rule will properly ProGuard all the model classes in
    # the package com.yourcompany.models.
    # Modify this rule to fit the structure of your app.
    -keepclassmembers class com.yourcompany.models.** {
      *;
    }

ProGuard に関してご不明な点や問題がある場合は、Guardsquare コミュニティ フォーラムを利用して、専門家のサポートを求めてください。

リリース準備

アプリをリリースする前に、リリース チェックリストに従って、アプリの準備が整っているかを確認することをおすすめします。

App Check を有効にして、ご自分のアプリだけがデータベースにアクセスできるようにしてください。

次のステップ