Android 远程配置值获取不一致
我正在onStart()和onStop()中获取Firebase远程配置值。我在“min_版本”中持有的变量,用于应用程序内更新功能。所以我的问题是,当我要远程配置并更新这些值时,它们不会立即更新,而是在更新为新值之前,将它们的旧值保存到另一个应用程序生命周期迭代中。这意味着,如果我决定要更新某个版本的所有用户,他们不会立即获得应用内更新,而是在通过onStop进行一次迭代后,然后再获得更新 以下是我的onStart()和onStop()代码 这是我的“getMinAppVersion()”方法-Android 远程配置值获取不一致,android,android-lifecycle,firebase-remote-config,Android,Android Lifecycle,Firebase Remote Config,我正在onStart()和onStop()中获取Firebase远程配置值。我在“min_版本”中持有的变量,用于应用程序内更新功能。所以我的问题是,当我要远程配置并更新这些值时,它们不会立即更新,而是在更新为新值之前,将它们的旧值保存到另一个应用程序生命周期迭代中。这意味着,如果我决定要更新某个版本的所有用户,他们不会立即获得应用内更新,而是在通过onStop进行一次迭代后,然后再获得更新 以下是我的onStart()和onStop()代码 这是我的“getMinAppVersion()”方法
private void getMinAppVersion(String didComeFrom, OnRemoteConfigFetchComplete listener){
//fetching the min_version parameter from 'remote config' of Firebase and saves it to our local variable.
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder().setMinimumFetchIntervalInSeconds(200).build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
mFirebaseRemoteConfig.fetch(0);
mFirebaseRemoteConfig.activate().addOnCompleteListener(task -> {
if (task.isSuccessful()) {
min_version = mFirebaseRemoteConfig.getLong(RemoteConfigUtil.MIN_VERSION);
Timber.tag("min_version_" + didComeFrom).d(String.valueOf(min_version));
if (listener != null)
listener.onFetchComplete();
} else {
Timber.tag("min version").d("error while fetching and activating remove config");
}
});
}
控制台中的远程配置更新不是即时的。它们不像推送通知那样工作。新值仅在返回的任务完成后生效,然后调用。我要指出的是,您没有使用fetch()返回的任务来确定何时从Firebase接收到新值。控制台中的远程配置更新不是即时的。它们不像推送通知那样工作。新值仅在返回的任务完成后生效,然后调用。我要指出的是,您没有使用fetch()返回的任务来确定何时从Firebase接收到新值。这就是为什么会发生这种情况。
远程配置
根据官方文档将值缓存在本地存储器中。这里可以参考并考虑
“远程配置包括一个客户端库,用于处理诸如获取参数值和缓存参数值等重要任务,同时还可以让您控制何时激活新值,从而影响应用程序的用户体验。这样,您就可以通过控制任何更改的时间来保护应用程序体验。”
当您使用客户端库获取远程配置参数时,缓存的值将返回给您(如果存在)(TL;DL)。有关详细信息,您可以阅读官方文档。它使用最小时间间隔获取值以避免应用程序崩溃,对于该最小时间间隔,最后获取的值用作缓存
mFirebaseRemoteConfig=FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings=新的FirebaseRemoteConfigSettings.Builder()
.setMinimumFetchIntervalInSeconds(3600)
.build();
mFirebaseRemoteConfig.setConfigSettingsAsync(配置设置);
这里的
3600
是新提取之间的最小间隔时间,您可以根据需要调整时间。如果您最近调用了fetch()
,并且再次调用它,则客户端库将根据最小间隔
时间来确定应执行新API调用或提供缓存值的时间。Firebase remote config在REST api上工作并使用它。以下是它发生的原因。远程配置
根据官方文档将值缓存在本地存储器中。这里可以参考并考虑
“远程配置包括一个客户端库,用于处理诸如获取参数值和缓存参数值等重要任务,同时还可以让您控制何时激活新值,从而影响应用程序的用户体验。这样,您就可以通过控制任何更改的时间来保护应用程序体验。”
当您使用客户端库获取远程配置参数时,缓存的值将返回给您(如果存在)(TL;DL)。有关详细信息,您可以阅读官方文档。它使用最小时间间隔获取值以避免应用程序崩溃,对于该最小时间间隔,最后获取的值用作缓存
mFirebaseRemoteConfig=FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings=新的FirebaseRemoteConfigSettings.Builder()
.setMinimumFetchIntervalInSeconds(3600)
.build();
mFirebaseRemoteConfig.setConfigSettingsAsync(配置设置);
这里的3600
是新提取之间的最小间隔时间,您可以根据需要调整时间。如果您最近调用了fetch()
,并且再次调用它,则客户端库将根据最小间隔
时间来确定应执行新API调用或提供缓存值的时间。Firebase remote config可在REST api上工作并使用。您好,谢谢您的回答。如果你看我文章中的代码,我有一个0毫秒的最小间隔,这应该会产生一个“fcm样”的行为,还是应该?好吧,如果我理解正确,SDK有一些崩溃安全机制,忽略我的0毫秒值,并将其放入一些最小允许值以防止崩溃?因为我没有看到任何撞车的情况。非常感谢。问题是远程配置比大型数据库更方便用户。是否有任何推荐的方法可以使用远程配置生成实时行为?我知道如何在实时数据库中执行此操作,但感谢您的提议。所以我得到了我的答案,非常感谢!您好,谢谢您的回答。如果你看我文章中的代码,我有一个0毫秒的最小间隔,这应该会产生一个“fcm样”的行为,还是应该?好吧,如果我理解正确,SDK有一些崩溃安全机制,忽略我的0毫秒值,并将其放入一些最小允许值以防止崩溃?因为我没有看到任何撞车的情况。非常感谢。问题是远程配置比大型数据库更方便用户。是否有任何推荐的方法可以使用远程配置生成实时行为?我知道如何在实时数据库中执行此操作,但感谢您的提议。所以我得到了我的答案,非常感谢!谢谢你的回答。因此,您建议在“fetch()”方法中添加一些完成侦听器?如果是,我该怎么办
private void getMinAppVersion(String didComeFrom, OnRemoteConfigFetchComplete listener){
//fetching the min_version parameter from 'remote config' of Firebase and saves it to our local variable.
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder().setMinimumFetchIntervalInSeconds(200).build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
mFirebaseRemoteConfig.fetch(0);
mFirebaseRemoteConfig.activate().addOnCompleteListener(task -> {
if (task.isSuccessful()) {
min_version = mFirebaseRemoteConfig.getLong(RemoteConfigUtil.MIN_VERSION);
Timber.tag("min_version_" + didComeFrom).d(String.valueOf(min_version));
if (listener != null)
listener.onFetchComplete();
} else {
Timber.tag("min version").d("error while fetching and activating remove config");
}
});
}