1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FirebaseRemoteConfigのパラメータキーが存在しない場合の注意点

Last updated at Posted at 2023-12-04

はじめに

CYBIRD Advent Calendar 2023 5日目担当の@kyorokyoroです。
主にUnityを使用した開発をしております。
4日目は@ayany0_zzZさんの快適なデスクワークのために!ハッピーライフハック5選!でした。
是非こちらも合わせてご覧ください!

概要

FirebaseのRemoteConfigからFirebaseコンソール上で設定した値や、A/Bテストでユーザーごとに異なる値を取得することができます。
その値はパラメータキーから取得するのですが、コンソールの設定より先にアプリ側の実装をした際やコンソールからRemoteConfigが削除された場合など、存在しないパラメータキーを取得しようとした際の情報がなかったのでまとめました。

準備

RemoteConfigの取得

起動時にRemoteConfigを取得してRemoteConfigManagerに保存する。

起動時クラス.cs
/// <summary>
/// FirebaseRemoteConfig取得.
/// </summary>
private void RemoteConfig()
{
    FirebaseRemoteConfig remoteConfig;
    remoteConfig = FirebaseRemoteConfig.DefaultInstance;
    remoteConfig.FetchAsync(TimeSpan.Zero).ContinueWithOnMainThread(task =>
    {
        var info = FirebaseRemoteConfig.DefaultInstance.Info;
        switch (info.LastFetchStatus)
        {
            case LastFetchStatus.Success:
                FirebaseRemoteConfig.DefaultInstance.ActivateAsync()
                .ContinueWithOnMainThread(task => {
                    // RemoteConfigManagerに保存
                    remoteConfigManager.SetRemoteConfig(remoteConfig);
                });
                break;
        }
    });
}
RemoteConfigManager.cs
using System;
using Firebase.RemoteConfig;
using UnityEngine;

/// <summary>
/// RemoteConfig用マネージャークラス.
/// </summary>
public class RemoteConfigManager : MonoBehaviour
{
    private FirebaseRemoteConfig remoteConfig;

    /// <summary>
    /// FirebaseRemoteConfigのセット.
    /// </summary>
    /// <param name="remoteConfig">remoteConfig</param>
    public void SetRemoteConfig(FirebaseRemoteConfig remoteConfig)
    {
        this.remoteConfig = remoteConfig;
    }
}

パラメータ値の取得

bool型

存在しないキー時の値:false
デフォルト値をあわせてfalseにしておくとよい。

RemoteConfigManager.cs
        /// <summary>
        /// パラメータキーからbool値を取得.
        /// </summary>
        /// <param name="key">パラメータキー</param>
        /// <returns>FirebaseRemoteConfigが未取得の場合はfalse 存在しないパラメータキーもfalse</returns>
        public bool GetBooleanValue(string key)
        {
            if (remoteConfig == null)
            {
                return false;
            }

            return remoteConfig.GetValue(key).BooleanValue;
        }

string型

存在しないキー時の値:空文字
デフォルト値をあわせて空文字にしておくとよい。

RemoteConfigManager.cs
        /// <summary>
        /// パラメータキーからstring値を取得.
        /// </summary>
        /// <param name="key">パラメータキー</param>
        /// <returns>FirebaseRemoteConfigが未取得の場合はstring.Empty 存在しないパラメータキーもfalse</returns>
        public string GetStringValue(string key)
        {
            if (remoteConfig == null)
            {
                return string.Empty;
            }

            return remoteConfig.GetValue(key).StringValue;
        }

double,long型

存在しないキー時の値:FormatException: Input string was not in a correct format.(入力文字列の形式が正しくありません。)
数値が取得できないため値をそのまま使用するとエラーになってしまうので注意。
try-catchを使用してエラー時は特定の値を返すようにする。

RemoteConfigManager.cs
        /// <summary>
        /// パラメータキーからdouble値を取得.
        /// </summary>
        /// <param name="key">パラメータキー</param>
        /// <returns>FirebaseRemoteConfigが未取得の場合は0 存在しないパラメータキーも0</returns>
        public double GetDoubleValue(string key)
        {
            if (remoteConfig == null)
            {
                return 0;
            }

            try
            {
                return remoteConfig.GetValue(key).DoubleValue;
            }
            catch (Exception e)
            {
                return 0;
            }
        }

        /// <summary>
        /// パラメータキーからlong値を取得.
        /// </summary>
        /// <param name="key">パラメータキー</param>
        /// <returns>FirebaseRemoteConfigが未取得の場合は0 存在しないパラメータキーも0</returns>
        public long GetLongValue(string key)
        {
            if (remoteConfig == null)
            {
                return 0;
            }

            try
            {
                return remoteConfig.GetValue(key).LongValue;
            }
            catch (Exception e)
            {
                return 0;
            }
        }

最後に

double,long型を使用する際は実装時は正常に動作していてもコンソールから削除など外部要因でエラーになりますので気をつけましょう。

6日目は@gumitaさんの 初めてのUnrealEngine5 です。
お楽しみに。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?