Firebase Remote Config を使ってみる


Firebase Remote Config を使用すると、アプリでパラメータを定義し、それらの値をクラウドで更新できます。これにより、アプリのアップデートを配布しなくてもアプリの外観や動作を変更できます。

Remote Config ライブラリは、アプリ内のデフォルトのパラメータ値の保存、Remote Config バックエンドからの更新されたパラメータ値のフェッチ、フェッチされた値がアプリで使用できるようになるタイミングの制御に使用されます。詳細については、Remote Config の読み込み方法をご覧ください。

ステップ 1: Firebase をアプリに追加する

Remote Config を使用するには、次の作業が必要です。

  • C++ プロジェクトを登録して Firebase を使用するように構成します。

    C++ プロジェクトですでに Firebase を使用している場合、この登録と構成はすでに行われています。

  • Firebase C++ SDK を C++ プロジェクトに追加します。

Firebase を C++ プロジェクトに追加するには、Firebase コンソールと開いている C++ プロジェクトの両方でこのタスクを行う必要があります(コンソールから Firebase 構成ファイルをダウンロードして C++ プロジェクトに移動するなど)。

ステップ 2: Remote Config をアプリに追加する

Android

Firebase をアプリに追加したら、次の操作を行います。

  1. Firebase アプリを作成し、JNI 環境とアクティビティに渡します。

    app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);

  2. 次に示すように、Remote Config ライブラリを初期化します。

    ::firebase::remote_config::Initialize(app);

iOS+

Firebase をアプリに追加したら、次の操作を行います。

  1. Firebase アプリを作成します。

    app = ::firebase::App::Create(::firebase::AppOptions());

  2. 次に示すように、Remote Config ライブラリを初期化します。

    ::firebase::remote_config::Initialize(app);

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

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

  1. ConfigKeyValue* オブジェクトまたは ConfigKeyValueVariant* オブジェクトと配列のサイズを使用して、一連のパラメータ名とデフォルト パラメータ値を定義します。

    Remote Config バックエンド パラメータ値をすでに構成している場合は、これらの Key-Value ペアを含むファイルをダウンロードし、これを使用して map オブジェクトを作成できます。詳細については、Remote Config テンプレートのデフォルトをダウンロードするをご覧ください。

  2. SetDefaults() を使用して、これらの値を Remote Config オブジェクトに追加します。

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

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

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

ステップ 5: パラメータ値を設定する

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

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

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

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

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

リアルタイム更新は、Android および Apple プラットフォーム用の Firebase C++ SDK v11.0.0 以降でサポートされています。

  1. アプリで AddOnConfigUpdateListener を呼び出して更新のリッスンを開始し、新しいパラメータ値を自動的にフェッチします。次の例では、更新をリッスンし、Activate が呼び出されると、新しくフェッチした値を使用して、更新されたウェルカム メッセージを表示します。
remote_config->AddOnConfigUpdateListener(
    [](firebase::remote_config::ConfigUpdate&& config_update,
       firebase::remote_config::RemoteConfigError remote_config_error) {
      if (remote_config_error != firebase::remote_config::kRemoteConfigErrorNone) {
        printf("Error listening for config updates: %d", remote_config_error);
      }
      // Search the `updated_keys` set for the key "welcome_message."
      // `updated_keys` represents the keys that have changed since the last
      // fetch.
      if (std::find(config_update.updated_keys.begin(),
                    config_update.updated_keys.end(),
                    "welcome_message") != config_update.updated_keys.end()) {
        remote_config->Activate().OnCompletion(
            [&](const firebase::Future& completed_future,
               void* user_data) {
              // The key "welcome_message" was found within `updated_keys` and
              // can be activated.
              if (completed_future.error() == 0) {
                DisplayWelcomeMessage();
              } else {
                printf("Error activating config: %d", completed_future.error());
              }
            },
            nullptr);
      }
    });

Remote Config の新しいバージョンを公開すると、アプリを実行して変更をリッスンしているデバイスが構成ファイルの更新リスナーを呼び出します。

次のステップ

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