コンソールへ移動

Android で Firebase Remote Config を使ってみる

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

アプリに Firebase を追加する

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

    Android SDK をインストールするときに、アナリティクスに関する依存関係を追加することもできます。Remote Config で、ユーザー プロパティ、オーディエンス、Firebase Predictions を対象としたアプリ インスタンスの条件付きターゲティングを行うには、アナリティクスが必要です。

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

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

Java

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

Kotlin

remoteConfig = FirebaseRemoteConfig.getInstance()val configSettings = FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build()
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

remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)

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

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

サービスでパラメータ値を設定する

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

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

サービスから値をフェッチし、有効化する

  1. Remote Config サービスからパラメータ値をフェッチするには、fetch() メソッドを呼び出します。Remote Config サービスに設定したすべての値がフェッチされ、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

    remoteConfig.fetchAndActivate()
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    val updated = task.getResult()
                    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 のユースケースに関する詳細な情報が必要な方は、主要なコンセプトと高度な戦略に関する以下のドキュメントをご覧ください。