【问题标题】:Firebase Remote Config - Initial fetch return local default valuesFirebase 远程配置 - 初始获取返回本地默认值
【发布时间】:2017-02-19 14:03:12
【问题描述】:

我正在使用 Firebase 远程配置来获取远程数据,我的应用需要从首次启动时获得的最新数据。

我正在我的应用程序的onCreate() 中进行获取和更新:

mFirebaseRemoteConfig.fetch(cacheExpiration)
    .addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if (task.isSuccessful()) {
                mFirebaseRemoteConfig.activateFetched();
            }
        }
    });

并使用 :

读取值
myValue = mFirebaseRemoteConfig.getBoolean(Constants.FIREBASE_REMOTE_MY_VALUE);
  1. 第一次获取运行良好(activateFetched() 成功触发),但它返回 remote_config_defaults 值而不是发布的远程配置。
  2. 第二次提取,即使是几秒钟后,也会返回远程值。
  3. 之后,接下来的抓取会受到 cacheExpiration 规则的约束(完全没问题)。

知道为什么在第一次调用时没有获取我的远程值吗?

【问题讨论】:

    标签: android firebase firebase-remote-config


    【解决方案1】:

    听起来您忽略了获取远程参数的异步性质。 onComplete() 回调在向 Firebase 服务器发送请求并收到回复后触发。这将需要几分之一秒,甚至更多。

    如果你的语句要使用获取的值:

    myValue = mFirebaseRemoteConfig.getBoolean(Constants.FIREBASE_REMOTE_MY_VALUE);
    

    跟随fetch() 的调用并且不在onComplete() 回调中,它将在接收到配置数据之前执行。第二次调用似乎只起作用了,因为第一次调用已经过去了足够的时间来完成,并且它获取并激活的数据已经存在。

    【讨论】:

    • 感谢您对异步的提醒。就是这样。
    【解决方案2】:

    Firebase 远程配置的回调是这样设计的,它会首先返回缓存的值。如果服务器没有保存缓存值,它将返回默认值中定义的值并触发远程获取。下次它返回时,如果它设法保存它们,它将返回从服务器获取的值。

    Firebase Remote Config 决定一个值的方式可以描述如下:

    首先,它检查是否有从服务器存储的缓存值,如果有,它会使用它并在第一次调用时返回该值。

    如果没有缓存值,它会查找以编程方式或在默认文件中定义的默认值。 (当你调用 setDefaults())

    如果没有从服务器缓存的值,并且默认值中没有值,它将使用该类型的系统默认值。

    更多信息可以在这里找到:https://firebase.google.com/docs/remote-config/

    【讨论】:

      【解决方案3】:

      就像@Bob Snyder 指出的那样,这是因为 firebase 的异步特性。

      所以像这样使用onCompleteListener 来解决这个问题:

      firebaseRemoteConfig.activate().addOnCompleteListener {
          //logic to check the remote value
      }
      

      【讨论】:

        【解决方案4】:

        我在从 Android 设备获取 RemoteConfig 时遇到的一个问题是我们最初使用的是该方法

        fetch()
        

        这给了我们同样的问题,即初始值始终与默认值相同。将其更改为

        fetchAndActivate()
        

        为我们解决了这个问题。我认为不同之处在于 Firebase 允许您获取数据但不能立即“激活”它,如果您想根据默认值立即采取一些行动,然后激活远程值和之后的任何逻辑,这可能会很有帮助点将基于远程值。

        希望这可以帮助某人:)

        【讨论】:

          猜你喜欢
          • 2016-12-18
          • 1970-01-01
          • 1970-01-01
          • 2021-10-09
          • 1970-01-01
          • 2018-07-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多