Android Firebase 远程配置初始获取不返回值
Posted
技术标签:
【中文标题】Android Firebase 远程配置初始获取不返回值【英文标题】:Android Firebase Remote Config initial fetch does not return value 【发布时间】:2016-12-18 07:00:02 【问题描述】:我正在使用 Firebase 远程配置在应用首次打开时获取数据。但问题是我无法在应用程序第一次启动时获取数据。 onComplete()
方法触发但不返回值。如果我关闭应用程序并再次运行,它会从远程配置返回值。
尝试在onCreate()
、onStart()
、onResume()
中调用 fetch(),给了它第二个延迟,postDelay()
仍然相同,初始 fetch 始终为空。我知道,Remote Config 有 setDefaults()
方法在获取默认值之前存储它,但在应用程序中设置默认值不是我想要的。
这是远程配置的工作方式还是我做错了什么?我发现的唯一解决方法是在onResume()
中添加fetch()
并在onCreate()
中再次调用onResume()。结果调用 onResume() 两次。 android系统第一次,代码第二次。
还有其他方法可以强制远程配置在第一次运行时获取数据吗?
更新
在onComplete()
内部,我必须先调用firebaseRemoteConfig.activateFetched();
,然后才能从中获取新值。
【问题讨论】:
在fetch监听器的onComplete()
方法中,当fetch没有返回值时task.isSuccessful()
是否为真?如果不是,task.getException().getMessage()
是什么?
发现问题。 activateFetched()
必须在获取新值之前调用。又一个愚蠢的错误......
activateFetched()
已弃用,请参阅***.com/questions/57494893/…。无论如何,我使用了 Mohammad Alotol 的解决方案。
【参考方案1】:
mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder().build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings)
.addOnCompleteListener(task -> mFirebaseRemoteConfig.fetchAndActivate()
.addOnCompleteListener(activity, task1
// now cache is updated you can fetch values
String value = mFirebaseRemoteConfig.getString("key");
));
配置设置完成后开始获取值
只需在应用启动时执行此操作,然后直接在其他任何地方获取值(例如:
mFirebaseRemoteConfig.getString("key");
)
【讨论】:
我还想补充一点,“OnSuccessListener”和“OnCompleteListener”不是一回事! OnSuccessListener 没有给我它第一次获取的最新数据,但 OnCompleteListener 给了我。【参考方案2】:检查几点:
在 Firebase 仪表板中创建新变量后,发布它
将缓存时间设置为 0 的获取
FirebaseRemoteConfig.getInstance().fetch(0).
【讨论】:
【参考方案3】:我知道这是一个老问题 - 但我遇到了与提问者完全相同的问题。在调查了几天后,我找到了答案,因此我将其发布在这里以帮助其他有困难的人。
首先要检查的是您的配置设置是否已在 Firebase 中发布。进行更改后,控制台右上角会出现一个发布按钮。
我遵循了大量关于如何在 Unity 中配置 FireBases 远程配置的教程和指南,但尽管调用了 ActivateFetched,但我没有得到任何结果。 在投入大量精力试图弄清楚为什么没有返回数据后,我偶然发现了这个线程:https://github.com/firebase/quickstart-unity/issues/9
事实证明,RemoteConfig 在 Unity 中不起作用,只会使用默认值。要实际使用远程配置,您必须进行构建并将其部署到目标设备上。
在我的 Android 设备上,我的所有远程配置都已成功检索
【讨论】:
我正在使用 Unity 并在开始后立即调用 ActivateFetched 以检索以前的配置(如策略 #3:下次加载值)。如果此策略正常工作,它将在下一次启动时更新值。但什么都没有改变。如果我在 Firebase 加载完成后调用了 ActivateFetched,则该值会正确更新。我想知道 Unity Editor 是否与 ActivateFetched 一起使用?【参考方案4】:感谢Pankaj kumar 的回答,我设置了firebase.remoteConfig().settings.minimumFetchIntervalMillis = 0
并且工作了
【讨论】:
以上是关于Android Firebase 远程配置初始获取不返回值的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Android 读取 Firebase 远程配置模板版本?
我可以使用 Firebase 远程配置来更新 Android 应用的 strings.xml 吗?
React JS App 与 Firebase 远程配置以获取远程标志