3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Unity】【Firebase】【リアルタイム Remote Config】アプリの強制アップデート

Last updated at Posted at 2024-07-25

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」を有効にする必要があります
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?