使用 FirebaseRemoteConfig 我很困惑 setDefault 方法是否会在我们每次 运行 时覆盖上次获取的缓存配置值。
Using FirebaseRemoteConfig I am confused whether the setDefault method overwrites the cached Config values from the last fetch everytime we run it.
我正在使用 FirebaseRemoteConfig class 的单例实例,它是使用以下 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 方法,并且由于最后获取的配置值有过期时间,这是否意味着配置值将恢复为初始默认值是硬编码的,而不是获取最后一次获取的已知配置。这是在最后一次获取的配置值过期后无法从服务器获取的情况。
我试着查看文档,但除了简单的概述外,没有关于整个缓存如何工作的具体细节。因此,有使用 RemoteConfig 经验的人可以轻松回答这个问题,但我是第一次使用它,因此不胜感激。
没有。 setDefaults
不会覆盖您可能从 RemoteConfig 收到的任何先前获取的值。
从 RemoteConfig 的角度来看,"expiration time" 并不意味着之前获取的值被视为无效。这只是意味着它是时候进入网络并查看是否出现了任何新值。如果没有(或者无法连接到网络),RemoteConfig 将保留上次下载的任何值。
我正在使用 FirebaseRemoteConfig class 的单例实例,它是使用以下 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 方法,并且由于最后获取的配置值有过期时间,这是否意味着配置值将恢复为初始默认值是硬编码的,而不是获取最后一次获取的已知配置。这是在最后一次获取的配置值过期后无法从服务器获取的情况。
我试着查看文档,但除了简单的概述外,没有关于整个缓存如何工作的具体细节。因此,有使用 RemoteConfig 经验的人可以轻松回答这个问题,但我是第一次使用它,因此不胜感激。
没有。 setDefaults
不会覆盖您可能从 RemoteConfig 收到的任何先前获取的值。
从 RemoteConfig 的角度来看,"expiration time" 并不意味着之前获取的值被视为无效。这只是意味着它是时候进入网络并查看是否出现了任何新值。如果没有(或者无法连接到网络),RemoteConfig 将保留上次下载的任何值。