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 远程配置初始获取不返回值的主要内容,如果未能解决你的问题,请参考以下文章

用户 ID 的 Firebase 远程配置条件

如何从 Android 读取 Firebase 远程配置模板版本?

我可以使用 Firebase 远程配置来更新 Android 应用的 strings.xml 吗?

React JS App 与 Firebase 远程配置以获取远程标志

Swift/iOS - Firebase 远程配置获取值永远不会完成

统一的 Firebase 远程配置仅获取默认值而不是真实值