Catch up on everything we announced at this year's Firebase Summit. Learn more

Firebase Remote Config を使ってみる

Firebase Remote Config を使ってアプリ内パラメータを定義し、その値をクラウドで更新できます。これにより、アプリのアップデートを配布しなくてもアプリの外観や動作を変更できます。このガイドでは、作業を開始するための手順について説明し、サンプルコードを示します(すべてのサンプルコードは firebase/quickstart-android GitHub リポジトリからクローンを作成またはダウンロードできます)。

Firebase と Remote Config SDK をアプリに追加する

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

  2. Remote Config で、ユーザー プロパティ、オーディエンス、Firebase Predictions を対象としたアプリ インスタンスの条件付きターゲティングを行うには、Google アナリティクスが必要です。プロジェクトで Google アナリティクスを有効にしてください。

  3. Firebase Android BoM を使用して、モジュール(アプリレベル)の Gradle ファイル(通常は app/build.gradle)で Remote Config Android ライブラリの依存関係を宣言します。

    また、Google アナリティクスの設定の一環として、Google アナリティクス用の Firebase SDK をアプリに追加する必要もあります。

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.0')
    
        // Declare the dependencies for the Remote Config and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-config'
        implementation 'com.google.firebase:firebase-analytics'
    }
    

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

    (別の方法)BoM を使用せずに Firebase ライブラリの依存関係を宣言する

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

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

    dependencies {
        // Declare the dependencies for the Remote Config and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-config:21.0.1'
        implementation 'com.google.firebase:firebase-analytics:20.0.0'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.0')
    
        // Declare the dependencies for the Remote Config and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-config-ktx'
        implementation 'com.google.firebase:firebase-analytics-ktx'
    }
    

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

    (別の方法)BoM を使用せずに Firebase ライブラリの依存関係を宣言する

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

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

    dependencies {
        // Declare the dependencies for the Remote Config and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-config-ktx:21.0.1'
        implementation 'com.google.firebase:firebase-analytics-ktx:20.0.0'
    }
    

Remote Config シングルトン オブジェクトを取得する

Remote Config オブジェクトのインスタンスを取得し、最小フェッチ間隔を設定して更新の頻度を増やせるようにします。

Java

mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);

Kotlin+KTX

remoteConfig = Firebase.remoteConfig
val configSettings = remoteConfigSettings {
    minimumFetchIntervalInSeconds = 3600
}
remoteConfig.setConfigSettingsAsync(configSettings)

このシングルトン オブジェクトは、アプリ内デフォルト パラメータ値の保存、更新されたパラメータ値のバックエンドからのフェッチ、フェッチされた値がアプリで使用できるようになるタイミングの制御に使用されます。

開発時には、比較的短い最小フェッチ間隔を設定することをおすすめします。詳細については、スロットル処理をご覧ください。

アプリ内デフォルト パラメータ値を設定する

アプリ内デフォルト パラメータ値を Remote Config オブジェクトに設定すると、Remote Config バックエンドに接続する前にアプリを意図したとおりに動作させることができます。また、バックエンド側に値が設定されていない場合は、これらのデフォルト値を使用できます。

  1. Map オブジェクト、またはアプリの res/xml フォルダに格納されている XML リソース ファイルを使用して、一連のパラメータ名とデフォルト パラメータ値を定義します。Remote Config クイックスタート サンプルアプリでは、XML ファイルを使用してデフォルトのパラメータ名や値を定義しています。
  2. 次のように setDefaultsAsync(int) を使用して、これらの値を Remote Config オブジェクトに追加します。

Java

mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);

Kotlin+KTX

remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)

アプリ内で使うパラメータ値を取得する

ここまでの手順で、パラメータ値を Remote Config オブジェクトから取得できるようになりました。バックエンドに値を設定し、フェッチして有効化すると、それらの値をアプリで使用できるようになります。または、setDefaultsAsync(int) を使用して、構成したアプリ内パラメータ値を取得します。これらの値を取得するには、アプリによって予期されるデータ型に対応した以下のメソッドを呼び出します。このとき、引数としてパラメータキーを指定します。

Remote Config バックエンドでパラメータ値を設定する

Firebase コンソールまたは Remote Config バックエンド API を使用して、サーバーサイドの新しいデフォルト値を作成できます。このデフォルト値は、目的の条件付きロジックまたはユーザー ターゲティングに従って、アプリ内の値をオーバーライドします。このセクションでは、Firebase コンソールでこれらの値を作成するための手順を説明します。

  1. Firebase コンソールでプロジェクトを開きます。
  2. メニューから [Remote Config] を選択して Remote Config ダッシュボードを表示します。
  3. アプリで定義したパラメータと同じ名前のパラメータを定義します。それぞれのパラメータにデフォルト値を設定できます(最終的には対応するアプリ内デフォルト値をオーバーライドします)。また、条件値を設定することもできます。詳しくは Remote Config のパラメータと条件をご覧ください。

値をフェッチして有効にする

  1. Remote Config バックエンドからパラメータ値をフェッチするには、fetch() メソッドを呼び出します。バックエンドに設定したすべての値がフェッチされ、Remote Config オブジェクトに保存されます。
  2. フェッチ済みのパラメータ値をアプリで使用できるようにするには、activate() メソッドを呼び出します。

    1 回の呼び出しで値をフェッチして有効化する場合は、fetchAndActivate() リクエストを使用して Remote Config バックエンドから値をフェッチし、それらをアプリで利用できるようにします。

    Java

    mFirebaseRemoteConfig.fetchAndActivate()
            .addOnCompleteListener(this, new OnCompleteListener<Boolean>() {
                @Override
                public void onComplete(@NonNull Task<Boolean> task) {
                    if (task.isSuccessful()) {
                        boolean updated = task.getResult();
                        Log.d(TAG, "Config params updated: " + updated);
                        Toast.makeText(MainActivity.this, "Fetch and activate succeeded",
                                Toast.LENGTH_SHORT).show();
    
                    } else {
                        Toast.makeText(MainActivity.this, "Fetch failed",
                                Toast.LENGTH_SHORT).show();
                    }
                    displayWelcomeMessage();
                }
            });

    Kotlin+KTX

    remoteConfig.fetchAndActivate()
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    val updated = task.result
                    Log.d(TAG, "Config params updated: $updated")
                    Toast.makeText(this, "Fetch and activate succeeded",
                            Toast.LENGTH_SHORT).show()
                } else {
                    Toast.makeText(this, "Fetch failed",
                            Toast.LENGTH_SHORT).show()
                }
                displayWelcomeMessage()
            }

これらの更新されたパラメータ値はアプリの動作と外観に影響するので、スムーズなユーザー エクスペリエンスを実現するタイミング(次にユーザーがアプリを開いたときなど)でフェッチ済みの値を有効化する必要があります。詳細と例については、Remote Config の読み込み方法をご覧ください。

スロットル処理

アプリが短期間に何度もフェッチすると、フェッチ呼び出しが抑制され、SDK から FirebaseRemoteConfigFetchThrottledException が返されます。バージョン 17.0.0 よりも前の SDK では、フェッチ リクエストは 60 分間に 5 回までと制限されていました(新しいバージョンでは制限が緩和されています)。

アプリの開発中は、開発とテストの反復処理をすばやく行うために、構成を頻繁に(1 時間に何度も)フェッチして有効化する必要が生じる場合があります。10 人程度の開発者がいるプロジェクトで迅速なイテレーションに対応するには、アプリ内で FirebaseRemoteConfigSettings オブジェクトの最小フェッチ間隔(setMinimumFetchIntervalInSeconds)に小さな値を一時的に設定します。

Remote Config のデフォルトの最小フェッチ間隔は 12 時間です。つまり、実際にフェッチ呼び出しが行われた回数に関係なく、12 時間のウィンドウ内で構成がバックエンドから複数回フェッチされることはありません。具体的には、次の順で最小フェッチ間隔が決定されます。

  1. fetch(long) のパラメータ
  2. FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long) のパラメータ
  3. デフォルト値(12 時間)

最小フェッチ間隔のカスタム値を設定するには、FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long) を使用します。

次のステップ

Remote Config のユースケースに関する詳細な情報が必要な方は、主要なコンセプトと高度な戦略に関する以下のドキュメントをご覧ください。