【问题标题】:Firebase.RemoteConfig working on pc and don't on androidFirebase.RemoteConfig 在 pc 上工作,不要在 android 上工作
【发布时间】:2022-09-30 08:22:07
【问题描述】:

我想得到this parameter。 我正在尝试使用此代码执行此操作。但它只能在电脑上工作。

这是我所有的代码,但我只需要从远程配置中获取参数并初始化 firebase 分析。

我无法弄清楚问题出在哪里,因为关于统一的指南很少。 我已经尝试了 3 天,请帮忙。

    using UnityEngine;
    using Firebase.RemoteConfig;
    using System;
    using System.Collections.Generic;
    using UnityEngine.SceneManagement;
    using System.Threading.Tasks;
    using Firebase.Crashlytics;
    using Firebase.Analytics;
    using Photon.Pun;
    using TMPro;
    using UnityEngine.UI;
    
    public class GameOpening : MonoBehaviour
    {
        [SerializeField] private Text _versionText;
        [SerializeField] private RemoteConfigSavings _remoteConfigSavings;
        private Firebase.DependencyStatus dependencyStatus = Firebase.DependencyStatus.UnavailableOther;
        
        private int _version = -1;
        private int _receivedVersion
        {
            get => _version;
            set
            {
                _version = value;          
                UpdateConfig();
            }
        }
        private void Start()
        {
            AwakeFireBase();
            Invoke(\"ToNextScene\", 1);
        }
        private void ToNextScene()
        {
            if(_version!=-1) PhotonNetwork.LoadLevel(1);

            else Invoke(\"ToNextScene\", 1);
        }
        private void AwakeFireBase()
        {
            if(Debug.isDebugBuild)
            {
                var configSettings = new ConfigSettings();
                configSettings.MinimumFetchInternalInMilliseconds = 0;
                FirebaseRemoteConfig.DefaultInstance.SetConfigSettingsAsync(configSettings);  
            }
    
            Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task =>
            {
                FirebaseAnalytics.SetAnalyticsCollectionEnabled(true);
                dependencyStatus = task.Result;
                if (dependencyStatus == Firebase.DependencyStatus.Available)
                {
                    //InitializeFirebase();
                    GetGameVersion();
                }
                else
                {
                    Debug.LogError(\"Could not resolve all Firebase dependencies: \" + dependencyStatus);
                }
            });
        }
    
        private void InitializeFirebase()
        {
            var defaults = new System.Collections.Generic.Dictionary<string, object>
            {
                {\"someThing\", \"asdf\"},
                {\"some2\", 12323}
            };

            FirebaseRemoteConfig.DefaultInstance.SetDefaultsAsync(defaults).ContinueWith(task=> { GetGameVersion(); });
            Debug.Log(\"Remote config ready!\");
        }
        private void GetGameVersion()
        {
            var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
            remoteConfig.FetchAndActivateAsync().ContinueWith(task =>
            {
                IDictionary<string, ConfigValue> values = remoteConfig.AllValues;
                values.TryGetValue(\"VERSION\", out ConfigValue objValue);
    
                int version = Convert.ToInt32(objValue.StringValue);
                _receivedVersion = version;
                _versionText.text = version.ToString();
            });
        }
        private void UpdateConfig()
        {
            _remoteConfigSavings.Version = _version;
            _remoteConfigSavings.SaveObject();
        }
    }

    标签: firebase unity3d firebase-remote-config


    【解决方案1】:

    在开始之前,我们需要清理我们的代码。

    我删除了除了与Firebase 远程配置. 另外,我删除了CheckAndFixDependenciesAsync()SetDefaultsAsync() 部分。

    在上述代码清理之后,剩下的就是GetGameVersion() 方法。现在,让我们找出问题所在。

    问题

    你应该完全理解FirebaseRemoteConfig API页面中对FetchAndActivateAsync()的描述。

    FetchAndActivateAsync()

    如果自上次从 Firebase 远程配置后端获取以来经过的时间超过默认最小获取间隔, 配置是从后端获取的。

    尽管此页面上未列出,但默认情况下,最小获取间隔为12小时.

    我们将该部分更改为FetchAsync(TimeSpan.Zero),因为我们想在开发时检查该值是否实时更新。

    using UnityEngine;
    using System;
    using Firebase.Extensions;
    
    public class GameOpening : MonoBehaviour
    {
        private void Start()
        {
            GetGameVersion();
        }
    
        private static void GetGameVersion()
        {
            var remoteConfig = Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance;
    
            var fetchTask = remoteConfig.FetchAsync(TimeSpan.Zero)
                .ContinueWithOnMainThread(async task =>
                {
                    await Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.ActivateAsync();
                    
                    var values = remoteConfig.AllValues;
                    values.TryGetValue("VERSION", out var configValue);
                    
                    Debug.Log(configValue.StringValue);
                });
        }
    }
    

    看看你为什么使用ActivateAsync()。我们使用是有原因的异步等待.

    注意:这实际上并没有应用数据或使其可访问,它只是检索并缓存它。要接受和访问新检索的值,您必须调用ActivateAsync()请注意,此函数是异步的,通常需要一段未指定的时间才能完成。

    所有问题都已解决。我还在Android上检查过它,它工作正常。 (基于三星 Galaxy 10 5G)(使用 LogCat)


    希望你的问题得到解决:)

    【讨论】:

    • 等待 Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.ActivateAsync();此行有 CS1061 'Task<bool>' 不包含 'GetAwaiter' 的定义,并且找不到接受类型为 'Task<bool>' 的第一个参数的可访问扩展方法 'GetAwaiter'(您是否缺少 using 指令或装配参考?)
    • @anxl228 我刚刚创建了一个新项目,从头开始再次尝试,它可以工作。你只是使用我提供的代码吗?您的 Unity 版本是否已过时? (我安装了 FirebaseRemote 包和 EDM4U 版本 1.2.171。)
    猜你喜欢
    • 2013-04-02
    • 2017-03-15
    • 1970-01-01
    • 2017-02-22
    • 2019-09-05
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多