Firebase Remote Configを使ってみる
Firebase Reote Configとは
アプリのアップデートを公開しなくても、アプリの動作と外観を変更することができます。
Firebase Remote Config は、アプリのアップデートをユーザーにダウンロードしてもらわなくても、アプリの動作と外観を変更できるクラウド サービスです。Remote Config を使用する場合は、アプリの動作や外観を制御するアプリ内デフォルト値を作成します。後から Firebase コンソールを使用して、すべてのアプリユーザーまたはユーザー層のセグメントに対してアプリ内デフォルト値をオーバーライドすることができます。アップデートを適用するタイミングはアプリ側で制御できます。アプリはアップデートの有無を頻繁にチェックし、パフォーマンスにほとんど影響をおよぼすことなくアップデートを適用することができます。
- Firebase Reote Configとは
- セットアップ
- FirebaseRemoteConfigのインスタンスを取得する
- デフォルト値を設定する
- 値を取得する
- RemoteConfigに値を設定する
- RemoteConfigの値を取得する
- まとめ
- 参考
セットアップ
FirebaseSDKの導入はCloudMessagingのときに書いたので省略します。
build.gradleに以下を追加します。
implementation 'com.google.firebase:firebase-config:11.6.0'
FirebaseRemoteConfigのインスタンスを取得する
mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); // 開発時のAPIの制限を解除するために、開発者モードを有効にする FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setDeveloperModeEnabled(BuildConfig.DEBUG) .build(); mFirebaseRemoteConfig.setConfigSettings(configSettings);
ここで注意が必要なのは、FirebaseRemoteConfig.getInstance()はFirebaseAppの初期化以降でないとコールできないということです。
これ以前にFirebaseApp#initializeAppメソッドをコールしておきましょう。
そうしないと、FirebaseRemoteConfig#getInstanceコール時にIllegalStateExceptionが発生します。
デフォルト値を設定する
デフォルト値はXML、または、Mapオブジェクトにてセットします。
ここでは、XMLを使います。
remote_config_textというパラメータキーにデフォルト値という文字列を紐付けています。
<?xml version="1.0" encoding="utf-8"?> <defaultsMap> <entry> <key>remote_config_text</key> <value>デフォルト値</value> </entry> </defaultsMap>
これを、FirebaseRemoteConfig#setDefaultsを使用してセットします。
mFirebaseRemoteConfig.setDefaults(R.xml.remote_config_defaults);
値を取得する
上記までの手順で値を取得できるようになりました。
セットしたデフォルト値を取得してみます。
パラメータキーを引数にして文字列を取得します。
String text = mFirebaseRemoteConfig.getString(KEY_REMOTE_CONFIG_TEXT);
文字列以外にも以下のメソッドでそれぞれの型の値を取得可能です。
- getBoolean()
- getByteArray()
- getDouble()
- getLong()
RemoteConfigに値を設定する
- Firebase コンソールでプロジェクトを開きます。 https://console.firebase.google.com/u/2/
- メニューから [Remote Config] を選択して Remote Config ダッシュボードを表示します。
- アプリで定義したパラメータキー(ここでは、remote_config_text)と同じ名前のパラメータを定義し、値をセットします。
ここでは、「RemoteConfigからの値」とします。
RemoteConfigの値を取得する
RemoteConfigの値を取得するにはFirebaseRemoteConfig#fetchメソッドを使用します。 fetchすることにより、RemoteConfigに設定した値がキャッシュされます。 fetch済みのパラメータをアプリで使用可能にするには、activateFetched() メソッドを呼び出す必 要があります。
mFirebaseRemoteConfig.fetch(cacheExpiration) .addOnCompleteListener(this, new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Toast.makeText(MainActivity.this, "Fetch Succeeded", Toast.LENGTH_SHORT).show(); mFirebaseRemoteConfig.activateFetched(); } else { Toast.makeText(MainActivity.this, "Fetch Failed", Toast.LENGTH_SHORT).show(); } } });
これで設定した値が取得できます。
fetchの引数にはキャッシュの有効期限を渡す必要があります。 最初にfetchしたときに渡した有効期限の時間が過ぎるまでアプリはキャッシュした値を使い続けます。 RemoteConfigにセットした値を即座にアプリに反映したい場合は、有効期限を短くする必要がありますがAPIの制限もあるので詳しくは以下を確認してください。
まとめ
RemoteConfigの値はフェッチしてアクティベートするまでアプリで使用できない
フェッチした値には有効期限があり、それがすぎるまでは新たに取得できない
参考
Firebase Remote Config | Firebase