Firebase Remote Config を使用して、アプリでパラメーターを定義し、クラウドでその値を更新して、アプリの更新を配布せずにアプリの外観と動作を変更できます。
Remote Config ライブラリは、アプリ内のデフォルト パラメータ値を保存し、Remote Config バックエンドから更新されたパラメータ値を取得し、取得した値をアプリでいつ利用できるようにするかを制御するために使用されます。詳細については、 Remote Config の読み込み戦略を参照してください。
このガイドでは、開始するための手順を順を追って説明し、いくつかのサンプル コードを提供します。これらはすべて、 firebase/quickstart-unity GitHub リポジトリから複製またはダウンロードできます。
ステップ 1: アプリに Remote Config を追加する
Remote Configを使用する前に、次のことを行う必要があります。
Unity プロジェクトを登録し、Firebase を使用するように構成します。
Unity プロジェクトですでに Firebase を使用している場合は、Firebase 用に既に登録および構成されています。
Unity プロジェクトがない場合は、サンプル アプリをダウンロードできます。
Unity プロジェクトにFirebase Unity SDK (具体的には
FirebaseRemoteConfig.unitypackage
) を追加します。
Unity プロジェクトに Firebase を追加するには、 Firebase コンソールと開いている Unity プロジェクトの両方でタスクが必要になることに注意してください (たとえば、コンソールから Firebase 構成ファイルをダウンロードして、それらを Unity プロジェクトに移動します)。
ステップ 2: アプリ内のデフォルト パラメータ値を設定する
Remote Config オブジェクトでアプリ内の既定のパラメーター値を設定して、Remote Config バックエンドに接続する前にアプリが意図したとおりに動作し、バックエンドで何も設定されていない場合に既定値を使用できるようにすることができます。
これを行うには、文字列ディクショナリを作成し、追加するデフォルトを表すキーと値のペアを入力します。 Remote Config バックエンド パラメータ値をすでに設定している場合は、これらのキーと値のペアを含むファイルをダウンロードし、それを使用して文字列辞書を作成できます。詳細については、「 Remote Config テンプレートのデフォルトをダウンロードする」を参照してください。
(文字列以外のプロパティは、 SetDefaultsAsync()
が呼び出されたときにプロパティの型に変換されます)。
System.Collections.Generic.Dictionary<string, object> defaults = new System.Collections.Generic.Dictionary<string, object>(); // These are the values that are used if we haven't fetched data from the // server // yet, or if we ask for values that the server doesn't have: defaults.Add("config_test_string", "default local string"); defaults.Add("config_test_int", 1); defaults.Add("config_test_float", 1.0); defaults.Add("config_test_bool", false); Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.SetDefaultsAsync(defaults) .ContinueWithOnMainThread(task => {
ステップ 3: アプリで使用するパラメーター値を取得する
これで、Remote Config オブジェクトからパラメーター値を取得できます。 Remote Config バックエンドで値を設定し、フェッチしてからアクティブ化すると、それらの値をアプリで使用できます。それ以外の場合は、 SetDefaultsAsync()
を使用して構成されたアプリ内パラメーター値を取得します。
これらの値を取得するには、パラメーター キーを引数として指定してGetValue()
を使用します。これは、値をさまざまな基本型に変換するためのプロパティを持つConfigValue
を返します。
ステップ 4: Firebase コンソールでアプリを接続する
Firebase コンソールで、アプリを Firebase プロジェクトに追加します。
ステップ 5: パラメータ値を設定する
- Firebase コンソールで、プロジェクトを開きます。
- メニューから [ Remote Config ] を選択して、Remote Config ダッシュボードを表示します。
- アプリで定義したパラメーターと同じ名前のパラメーターを定義します。パラメータごとに、デフォルト値 (最終的にはアプリ内デフォルト値を上書きします) と条件値を設定できます。詳しくは、 Remote Config のパラメーターと条件をご覧ください。
ステップ 6: 値を取得してアクティブ化する (必要に応じて)
Remote Config バックエンドからパラメーター値を取得するには、 FetchAsync()
メソッドを呼び出します。バックエンドで設定した値はすべて取得され、Remote Config オブジェクトにキャッシュされます。
// Start a fetch request. // FetchAsync only fetches new data if the current data is older than the provided // timespan. Otherwise it assumes the data is "recent enough", and does nothing. // By default the timespan is 12 hours, and for production apps, this is a good // number. For this example though, it's set to a timespan of zero, so that // changes in the console will always show up immediately. public Task FetchDataAsync() { DebugLog("Fetching data..."); System.Threading.Tasks.Task fetchTask = Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.FetchAsync( TimeSpan.Zero); return fetchTask.ContinueWithOnMainThread(FetchComplete); }
上記のコードでは、 FetchComplete
はメソッドであり、署名はContinueWithOnMainThread()
のオーバーロードの 1 つのパラメーターと一致します。
以下のサンプル コードでは、 FetchComplete
メソッドが前のタスク ( fetchTask
) に渡されます。これにより、 FetchComplete
はタスクが終了したかどうかを判断できます。コードはInfo.LastFetchStatus
を使用して、終了も成功したかどうかを判断します。その場合、Remote Config パラメーター値はactivateAsync()
を使用してアクティブ化されます。
private void FetchComplete(Task fetchTask) {
if (!fetchTask.IsCompleted) {
Debug.LogError("Retrieval hasn't finished.");
return;
}
var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
var info = remoteConfig.Info;
if(info.LastFetchStatus != LastFetchStatus.Success) {
Debug.LogError($"{nameof(FetchComplete)} was unsuccessful\n{nameof(info.LastFetchStatus)}: {info.LastFetchStatus}");
return;
}
// Fetch successful. Parameter values must be activated to use.
remoteConfig.ActivateAsync()
.ContinueWithOnMainThread(
task => {
Debug.Log($"Remote data loaded and ready for use. Last fetch time {info.FetchTime}.");
});
}
FetchAsync()
を介してフェッチされた値は、フェッチが完了するとローカルにキャッシュされますが、 ActivateAsync()
が呼び出されるまで使用できません。これにより、新しい値が計算の途中で適用されたり、問題や奇妙な動作を引き起こす可能性のある他の時点で適用されたりしないようにすることができます。
ステップ 7: (オプション) 開発者モードを有効にする
開発中にスロットリングを無効にするために使用できる開発者モードを有効にするには、 FirebaseRemoteConfig.Setting
プロパティを使用して、 IsDeveloperMode
を true に設定した新しいConfigSettings
を設定します。
次のステップ
If you haven't already, explore the Remote Config use cases , and take a look at some of the key concepts and advanced strategies documentation, including: