【问题标题】:How to check Firebase Remote Config Timeout on unity?如何统一检查 Firebase 远程配置超时?
【发布时间】:2021-02-23 11:27:31
【问题描述】:

你好所以我想在unity上检查这个java函数

FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(MINIMUM_FETCH_INTERVAL)
        .setFetchTimeoutInSeconds(FETCH_TIME_OUT)
        .build();

但是好像unity上没有config setting interval也看不懂firebase文档上说的是什么

https://firebase.google.com/docs/reference/unity/struct/firebase/remote-config/config-settings#struct_firebase_1_1_remote_config_1_1_config_settings_1a35df0caae275b6e9a435103683cad318

这里是我关于统一的 firebse 脚本

public static _FirebaseRemoteConfig instance;
​
    private void Awake()
    {
        if (instance != null)
        {
            Destroy(gameObject);
        }
        else
        {
            DontDestroyOnLoad(gameObject);
            instance = this;
        }
        InitializeFirebase();
    }
​
    public int countingUpdate;
    public int maxCount;
​
    Firebase.DependencyStatus dependencyStatus = Firebase.DependencyStatus.UnavailableOther;
    // Use this for initialization
    void Start()
    {
​
    }
​
    public void InitializeFirebase()
    {
        System.Collections.Generic.Dictionary<string, object> defaults =
            new System.Collections.Generic.Dictionary<string, object>();
        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.SetDefaults(defaults);
        Debug.Log("Remote config ready!");
​
        FetchFireBase();
    }
    public void FetchFireBase()
    {
        FetchDataAsync();
    }
    public void ShowData()
    {
        Debug.Log("maxCountToShowAdmob: " +
            Firebase.RemoteConfig.FirebaseRemoteConfig.GetValue("MaxCountShowIntersitialAds").StringValue);
    }
​
    // Start a fetch request.
    public Task FetchDataAsync()
    {
        Debug.Log("Fetching data...");
        System.Threading.Tasks.Task fetchTask = Firebase.RemoteConfig.FirebaseRemoteConfig.FetchAsync(
            TimeSpan.Zero);
        return fetchTask.ContinueWith(FetchComplete);
    }
​
    void FetchComplete(Task fetchTask)
    {
        if (fetchTask.IsCanceled)
        {
            Debug.Log("Fetch canceled.");
        }
        else if (fetchTask.IsFaulted)
        {
            Debug.Log("Fetch encountered an error.");
        }
        else if (fetchTask.IsCompleted)
        {
            Debug.Log("Fetch completed successfully!");
        }
​
        var info = Firebase.RemoteConfig.FirebaseRemoteConfig.Info;
        switch (info.LastFetchStatus)
        {
            case Firebase.RemoteConfig.LastFetchStatus.Success:
                Firebase.RemoteConfig.FirebaseRemoteConfig.ActivateFetched();
                Debug.Log(String.Format("Remote data loaded and ready (last fetch time {0}).",
                    info.FetchTime));
                break;
            case Firebase.RemoteConfig.LastFetchStatus.Failure:
                switch (info.LastFetchFailureReason)
                {
                    case Firebase.RemoteConfig.FetchFailureReason.Error:
                        Debug.Log("Fetch failed for unknown reason");
                        break;
                    case Firebase.RemoteConfig.FetchFailureReason.Throttled:
                        Debug.Log("Fetch throttled until " + info.ThrottledEndTime);
                        break;
                }
                break;
            case Firebase.RemoteConfig.LastFetchStatus.Pending:
                Debug.Log("Latest Fetch call still pending.");
                break;
        }
    }
​
    public void DisplayAds()
    {
        countingUpdate++;
​
        if (countingUpdate % int.Parse(Firebase.RemoteConfig.FirebaseRemoteConfig.GetValue("MaxCountShowIntersitialAds").StringValue) == 0)
        {
            //ADs ready to show
            _AdmobAds.instance.ShowInterstitialAd();
            countingUpdate = 0;
        }
    }

【问题讨论】:

  • 您是否尝试过类似的方法,例如Firebase.RemoteConfig.FirebaseRemoteConfig.FetchTimeoutInMilliseconds = XYZ; ?或者Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultTimeoutInMilliseconds = XYZ;
  • 是的,然后是CS0117- FirebaseRemoteConfig does not contain a definition for FetchTimeoutInMilliseconds @derHugo
  • 我面前没有项目和这个库......只需输入 Firebase.RemoteConfig.FirebaseRemoteConfig. 并让您的 IDE 显示那里存在哪些属性/字段 ;)
  • 实际上,与此类似的 FetchAsync() 我也已经实现了,但我不确定,所以这让我感到困惑,因为不存在 FetchIntervalSecond 的文档。 @derHugo

标签: firebase unity3d firebase-remote-config


【解决方案1】:

7.1.0 Unity SDK 对远程配置的工作方式进行了一些更改,因此文档现在可能有点混乱。

使用 7.1.0 SDK,以下代码应该可以工作:

var configSettings = new Firebase.RemoteConfig.ConfigSettings()
{
  MinimumFetchInternalInMilliseconds = 42
};

FirebaseRemoteConfig.DefaultInstance.SetConfigSettingsAsync(configSettings).ContinueWithOnMainThread(task =>
{
  if (task.IsCompleted && task.Exception != null)
  {
    // do remote config stuff
  }
});

但如果你打算使用FetchAsync(TimeSpan.Zero),我认为你会发现更改默认的最小获取间隔不会有任何作用。

我还会警告你看起来很安全(只是在做Debug.Log),但是如果你想对 Unity 对象做任何事情(通常使用UnityEngine 命名空间),你可能想要更改:

return fetchTask.ContinueWith(FetchComplete);

return fetchTask.ContinueWithOnMainThread(FetchComplete);

【讨论】:

  • 嘿,我目前正在实现这一点,并注意到MinimumFetchInternalInMilliseconds 实际上以秒为单位而不是毫秒。如果我将值设置为60000(应该是 60 秒),它就不起作用。如果我将值设置为60,则值会在 60 秒后过期。你能确认一下吗?
  • 我建议在这里提交一个错误,因为这听起来是一个相当糟糕的问题:github.com/firebase/quickstart-unity/issues
猜你喜欢
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
  • 1970-01-01
  • 2022-07-25
  • 2022-08-10
  • 2010-09-11
  • 1970-01-01
相关资源
最近更新 更多