4

我正在使用 FirebaseRemoteConfig 类的单例实例,它是使用以下 Provider 方法生成的。

@Provides
@Singleton
FirebaseRemoteConfig provideFirebaseRemoteConfig() {
    final FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
            .setDeveloperModeEnabled(BuildConfig.DEBUG)
            .build();
    mFirebaseRemoteConfig.setConfigSettings(configSettings);
    mFirebaseRemoteConfig.setDefaults(R.xml.remote_config_defaults);

    long cacheExpiration = 3600 * 3; // 3 hours in seconds.

    if (mFirebaseRemoteConfig.getInfo().getConfigSettings().isDeveloperModeEnabled()) {
        cacheExpiration = 0;
    }

    mFirebaseRemoteConfig.fetch(cacheExpiration)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        // Once the config is successfully fetched it must be activated before newly fetched
                        // values are returned.
                        mFirebaseRemoteConfig.activateFetched();
                    } else {
                        FirebaseCrash.log("RemoteConfig fetch failed at " +System.currentTimeMillis());
                    }
                }
            });
    return mFirebaseRemoteConfig;
}

现在这里的问题是,如果我每次生成单例实例时都设置 setDefaults 方法,并且由于上次获取的配置值有过期时间,这是否意味着配置值将恢复为硬编码的初始默认值而不是拿起最后一个已知的配置。这是在最后一次获取的 Config 值过期后无法从服务器获取的情况。

我尝试查看文档,但除了一个简单的概述外,没有关于整个缓存如何工作的具体细节。因此,有使用 RemoteConfig 经验的人可以轻松回答这个问题,但我是第一次使用它,因此不胜感激。

4

1 回答 1

6

没有。setDefaults不会覆盖您可能从 RemoteConfig 收到的任何先前获取的值。

从 RemoteConfig 的角度来看,“过期时间”并不意味着之前获取的值被认为是无效的。这只是意味着它是时候进入网络并查看是否出现了任何新值。如果他们没有(或者如果它无法连接到网络),RemoteConfig 将保留它上次下载的任何值。

于 2017-05-18T18:07:17.207 回答