Firebase远程配置 - 初始提取返回本地默认值

时间:2017-02-19 14:03:12

标签: android firebase firebase-remote-config

我正在使用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规则(完全没问题)。
  4. 知道为什么我的远程值没有在第一次调用时获取?

4 个答案:

答案 0 :(得分:2)

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

Firebase远程配置决定值的方式可以描述如下:

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

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

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

可在此处找到更多信息:https://firebase.google.com/docs/remote-config/ Firebase Remote Config defaults

答案 1 :(得分:2)

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

如果您的语句使用了获取的值:

myValue = mFirebaseRemoteConfig.getBoolean(Constants.FIREBASE_REMOTE_MY_VALUE);

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

答案 2 :(得分:0)

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

fetch()

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

fetchAndActivate()

为我们解决了该问题。我认为区别在于Firebase允许您获取数据,但不能立即“激活”数据,如果您希望基于默认值立即采取一些措施,然后激活远程值,然后再执行其后的任何逻辑,那么这可能会有所帮助点将基于远程值。

希望这对某人有帮助:)

答案 3 :(得分:0)

就像@Bob Snyder指出的,这是由于Firebase的异步特性。

因此,像这样使用onCompleteListener来解决此问题:

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