2017-02-19 25 views
1

我正在使用Firebase远程配置来获取远程数据,我的应用程序需要第一次启动时的最新数据。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规则(完全可以)。

任何想法为什么我的远程值没有在第一次调用时被提取?

回答

2

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

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

myValue = mFirebaseRemoteConfig.getBoolean(Constants.FIREBASE_REMOTE_MY_VALUE); 

如下调用fetch(),而不是在onComplete()回调,它的配置数据被接收之前将执行。第二次调用只显示工作,因为第一次调用已经完成了足够的时间,并且它提取并激活的数据存在。

+0

谢谢你对异步的提醒。就是这样。 – LegZ

2

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

在火力地堡远程配置上的值决定可以描述如下的方式:

首先它会检查是否有一个从服务器存储在缓存值,如果它使用的是和返回第一次通话时的价值。

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

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

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