Unity で Firebase の 「リアルタイム Remote Config」 を使用するサンプルです。
↓ 今回作成したサンプルがこちら
Firebaseコンソール で RemoteConfig の値を変更した瞬間に、
アプリ側でその値の変更を検知して、特定の処理を実行することができます。
↓ 今回サンプルで作成したコードは下記です
RemoteConfigSample.cs
using System.Threading.Tasks;
using UnityEngine;
using Firebase.Extensions;
using Firebase.RemoteConfig;
using System;
using System.Linq;
public class RemoteConfigSample : MonoBehaviour {
// アップデートが必要な時に表示するUI
[SerializeField] GameObject _uiUpdate;
// RemoteConfigで取得する値のキー
private const string KEY = "app_version";
/// <summary>
/// アプリ起動時の初期化処理
/// </summary>
async void Start () {
// アプリ起動時にアプリバージョンを取得
string version = await Fetch(KEY);
// アプリバージョンチェック
CheckAppVersion(int.Parse(version));
// RemoteConfig更新のリッスンを開始
FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener += ConfigUpdateListenerEventHandler;
}
/// <summary>
/// RemoteConfig更新時
/// </summary>
private void ConfigUpdateListenerEventHandler(object sender, ConfigUpdateEventArgs args) {
if (args.Error != RemoteConfigError.None) {
Debug.LogError($"[ConfigUpdateListenerEventHandler] Error occurred while listening: {args.Error}");
return;
}
FirebaseRemoteConfig.DefaultInstance.ActivateAsync().ContinueWithOnMainThread(
task => {
if (args.UpdatedKeys.Contains(KEY)) {
// アプリバージョンチェック
string version = FirebaseRemoteConfig.DefaultInstance.GetValue(KEY).StringValue;
CheckAppVersion(int.Parse(version));
}
});
}
/// <summary>
/// 指定キーのデータ取得
/// </summary>
public async Task<string> Fetch(string key) {
string value = "";
var tcs = new TaskCompletionSource<bool>();
await FirebaseRemoteConfig.DefaultInstance.FetchAsync(TimeSpan.Zero).ContinueWithOnMainThread(task => {
FirebaseRemoteConfig.DefaultInstance.ActivateAsync().ContinueWithOnMainThread(activateTask => {
value = FirebaseRemoteConfig.DefaultInstance.GetValue(key).StringValue;
tcs.SetResult(true);
});
});
await tcs.Task;
return value;
}
/// <summary>
/// アプリバージョンチェック
/// </summary>
private void CheckAppVersion(int appVersion) {
if (int.Parse(Application.version) < appVersion) {
// アプリバージョンが上がっていた場合は更新を促す
_uiUpdate.SetActive(true);
}
}
/// <summary>
/// 破棄時
/// </summary>
void OnDestroy() {
// RemoteConfig更新のリッスンを停止
FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener -= ConfigUpdateListenerEventHandler;
}
}
補足
- FetchAsync のほうはUnityEditorでも値は取得できるのですが、OnConfigUpdateListener で登録したメソッドは実機でしか動作しません!
↑ 今回の記事はこれだけ言いたかった(ここで嵌った...)
- その他、基本的には Firebase公式のガイド に従えば問題なさそうです
- Firebase Unity SDK v11.0.0 以降でサポートされています
- Google Cloud コンソール で「Firebase Remote Config Realtime API」を有効にする必要があります