Firebase Remote Config を使ってみる


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

ステップ 1: Firebase と Remote Config SDK をアプリに追加する

  1. Flutter 用の Firebase SDK をインストールして初期化します(まだ行っていない場合)。

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

  3. Flutter プロジェクトのルート ディレクトリから、次のコマンドを実行して Remote Config プラグインをインストールします。

    flutter pub add firebase_remote_config
    

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

    flutter pub add firebase_analytics
    
  4. プロジェクトを再ビルドします。

    flutter run
    
  5. macOS で Remote Config を使用している場合は、Xcode でキーチェーン共有を有効にします。

ステップ 2: Remote Config シングルトン オブジェクトを取得する

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

final remoteConfig = FirebaseRemoteConfig.instance;
await remoteConfig.setConfigSettings(RemoteConfigSettings(
    fetchTimeout: const Duration(minutes: 1),
    minimumFetchInterval: const Duration(hours: 1),
));

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

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

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

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

await remoteConfig.setDefaults(const {
    "example_param_1": 42,
    "example_param_2": 3.14159,
    "example_param_3": true,
    "example_param_4": "Hello, world!",
});

ステップ 4: アプリ内で使用するパラメータ値を取得する

ここまでの手順で、パラメータ値を Remote Config オブジェクトから取得できるようになりました。バックエンドに値を設定し、フェッチして有効化すると、それらの値をアプリで使用できるようになります。または、setDefaults() を使用して、構成したアプリ内パラメータ値を取得します。

これらの値を取得するには、アプリによって予期されるデータ型に対応した以下のメソッドを呼び出します。このとき、引数としてパラメータキーを指定します。

  • getBool()
  • getDouble()
  • getInt()
  • getString()

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

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

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

ステップ 6: 値をフェッチして有効にする

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

  2. フェッチ済みのパラメータ値をアプリで使用できるようにするには、activate() メソッドを呼び出します。

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

    await remoteConfig.fetchAndActivate();
    

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

ステップ 7: リアルタイムで更新をリッスンする

パラメータ値をフェッチしたら、リアルタイム Remote Config を使用して、Remote Config バックエンドからの更新をリッスンできます。更新が利用可能になると、リアルタイム Remote Config が接続済みデバイスに通知し、新しいバージョンの Remote Config を公開すると変更が自動的にフェッチされます。

なお、リアルタイム Remote Config はウェブで利用できません。

  1. アプリで onConfigUpdated を使用して更新のリッスンを開始し、新しいパラメータ値を自動的にフェッチします。

     remoteConfig.onConfigUpdated.listen((event) async {
       await remoteConfig.activate();
    
       // Use the new config values here.
     });
    
  2. 新しいバージョンの Remote Config が公開されると、アプリを実行して変更をリッスンしているデバイスが新しい構成ファイルを有効にします。

スロットル処理

アプリが短期間に何度もフェッチすると、フェッチ呼び出しが抑制され、FirebaseRemoteConfiglastFetchStatus プロパティの値が RemoteConfigFetchStatus.throttle になります。

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

アプリの開発中にリアルタイム Remote Config を使用することが推奨されていますが、使用していない場合は、構成ファイルを頻繁に(1 時間に何度も)フェッチして有効にし、アプリの開発とテストを迅速にイテレーションすることをおすすめします。10 人以下の開発者がいるプロジェクトで迅速なイテレーションに対応するには、setConfigSettings() を使用して、最小フェッチ間隔を一時的に小さく設定します。

final remoteConfig = FirebaseRemoteConfig.instance;
await remoteConfig.setConfigSettings(RemoteConfigSettings(
    fetchTimeout: const Duration(minutes: 1),
    minimumFetchInterval: const Duration(minutes: 5),
));

次のステップ

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