统一的 Firebase 远程配置仅获取默认值而不是真实值

Posted

技术标签:

【中文标题】统一的 Firebase 远程配置仅获取默认值而不是真实值【英文标题】:Firebase remote config in unity get only default values and not real ones 【发布时间】:2018-07-09 08:40:24 【问题描述】:

我正在尝试将 Firebase 远程配置实施到统一项目中。

这是唯一正在运行的脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Firebase;
using Firebase.RemoteConfig;
using System;
using System.Threading.Tasks;

public class FirebaseAlt : MonoBehaviour

    private  DependencyStatus dependencyStatus = DependencyStatus.UnavailableOther;

    void Awake()
    
        FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => 
            dependencyStatus = task.Result;
            if (dependencyStatus == DependencyStatus.Available)
            
                 InitializeFirebase();
            
            else
            
                 Debug.LogError("Could not resolve all Firebase dependencies: " + dependencyStatus);
            
         );
     

     // Initialize remote config, and set the default values.
     void InitializeFirebase()
     
          FetchData();
     

     // Start a fetch request.
     public void FetchData()
     
          Debug.Log("Fetching data...");
          // FetchAsync only fetches new data if the current data is older than the provided
          // timespan.  Otherwise it assumes the data is "recent enough", and does nothing.
          // By default the timespan is 12 hours, and for production apps, this is a good
          // number.  For this example though, it's set to a timespan of zero, so that
          // changes in the console will always show up immediately.
          Task fetchTask = FirebaseRemoteConfig.FetchAsync(TimeSpan.Zero);
          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 = FirebaseRemoteConfig.Info;

           switch (info.LastFetchStatus)
           
               case LastFetchStatus.Success:
                   FirebaseRemoteConfig.ActivateFetched();

                   Debug.Log(string.Format("Remote data loaded and ready (last fetch time 0).", info.FetchTime));
                   string stop = FirebaseRemoteConfig.GetValue("stops").StringValue;
                   Debug.Log("Value: " + (string.IsNullOrEmpty(stop) ? "NA" : stop));

                   // Also tried this way, but then it doesn't enter the IF block
                   /*if (FirebaseRemoteConfig.ActivateFetched())
                    
                        Debug.Log(string.Format("Remote data loaded and ready (last fetch time 0).", info.FetchTime));

                        string stop = FirebaseRemoteConfig.GetValue("stops").StringValue;
                        Debug.Log("Value: " + (string.IsNullOrEmpty(stop) ? "NA" : stop));
                   */
                   break;
               case LastFetchStatus.Failure:
                   switch (info.LastFetchFailureReason)
                   
                       case FetchFailureReason.Error:
                             Debug.Log("Fetch failed for unknown reason");
                             break;
                       case FetchFailureReason.Throttled:
                             Debug.Log("Fetch throttled until " + info.ThrottledEndTime);
                             break;
                   
                  break;
               case LastFetchStatus.Pending:
                  Debug.Log("Latest Fetch call still pending.");
                  break;
         
     

当我运行这段代码时,我得到了所有正确的响应

"正在获取数据...", "获取成功!"

“远程数据已加载并准备就绪(上次获取时间为 1/1/1970 12:00:00 AM)。”

但该值为空。

如果我查看键是什么,我会得到一个默认值列表(我在测试开始时已将其删除,但未将其删除),但没有在 firebase 控制台中添加任何新键(例如stops 键我试图显示)。

我尝试了几乎所有我能找到的解决方案,但无济于事。我有google-services.json(不知道是否与此相关),NDK 版本r13b。将 FirebaseRemoteConfig.Settings.IsDeveloperMode 更改为 true。我还尝试在ActivateFetched() 之后等待一段时间(1 分钟),看看它是否有任何改变。

ActivateFetched 上的 API 声明它返回:

如果有一个 Fetched Config 并且它被激活,则为 true。如果没有,则为假 已找到 Fetched Config,或 Fetched Config 已激活。

我怎样才能找到这个问题的根源? (为什么没有找到获取的配置。它存在于项目控制台中:/)

【问题讨论】:

您确定点击了 Firebase 控制台中的“发布”按钮以公开这些值吗? 我没有看到发布按钮 :( 【参考方案1】:

看起来您的 IP 被标记为限制,因为对远程配置服务器的请求过多。只需要再等一天,一切都应该工作或更换电脑。这是一个博客,其中列出了使用远程配置时最常见的错误以及如何预防。希望它会有所帮助。 https://killertee.wordpress.com/2020/01/08/make-use-of-firebase-remote-config-in-your-unity-game/

【讨论】:

请提供完整的解决方案作为答案。不建议链接到外部链接,因为将来任何人都可能无法找到该文章的答案。

以上是关于统一的 Firebase 远程配置仅获取默认值而不是真实值的主要内容,如果未能解决你的问题,请参考以下文章

仅使用 jQuery/Ajax 刷新表的值而不重新加载页面

如何使用 NSUserDefaults 注册用户默认值而不覆盖现有值?

从“默认字典”更新值而不删除其键[重复]

将表单的所有输入重置为默认值而不重新加载

获取 timePicker 值而不显示 timePicker 对话框

有没有办法从函数中获取值而不返回它? [关闭]