android - FirebaseRemoteConfig getString 返回空但远程配置的字节数组不为空

标签 android firebase firebase-remote-config

在第一张图片中,我停止了尝试从 FirebaseRemoteConfig 获取一些数据的应用程序。我评估的代码是从 FirebaseRemoteConfig 获取字符串的简单代码。但它返回空字符串。

然后在第二张图片中,我深入 FirebaseRemoteConfig 对象内部,发现 zzogi.zzogw.get("configns:firebase") 的散列映射具有我需要的内容。

为什么 remoteConfig.getString() 没有返回我的值,即使 remoteConfig 有值?

仅供引用,这是渐变线

implementation 'com.google.firebase:firebase-core:11.8.0'
implementation 'com.google.firebase:firebase-config:11.8.0'

这是我创建 FirebaseRemoteConfig 对象的代码。如果您需要更多代码,请询问。

public FirebaseRemoteConfig getFirebaseRemoteConfig(){
    FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings settings = new FirebaseRemoteConfigSettings.Builder()
            .setDeveloperModeEnabled(true)
            .build();
    config.setConfigSettings(settings);
    return config;
}

enter image description here

enter image description here

最佳答案

您应该为所有配置参数添加默认值。您可以在 xml 文件夹中为默认值创建一个名为 config 的 xml 资源。

<?xml version="1.0" encoding="utf-8"?>
<defaultsMap>
    <entry>
        <key>foo</key>
        <value>bar</value>
    </entry>
    <entry>
        <key>some_key</key>
        <value>true</value>
    </entry>
    <entry>
        <key>another_key</key>
        <value>2</value>
    </entry>
</defaultsMap>

当您需要一个 FirebaseRemoteConfig 实例时,您不需要每次都设置配置和默认值。在主要 Activity 的 onCreate 方法中仅触发一次。

public void configureFirebaseRemoteConfigInstance(){
    FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
            .setDeveloperModeEnabled(BuildConfig.DEBUG)
            .build();
    mFirebaseRemoteConfig.setConfigSettings(configSettings);
    mFirebaseRemoteConfig.setDefaults(R.xml.config);
}

然后从服务器获取您的覆盖。您可以在 onResume 上触发它。它不会检查服务器,直到 cacheExpiration 超时。此外,当您处于开发模式时,cacheExpiration 将为 0。无需更改生产代码。

public void refreshConfigValuesIfNeeded() {
    FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    long cacheExpiration = 7200; //2 hour in seconds.
    if (mFirebaseRemoteConfig.getInfo().getConfigSettings().isDeveloperModeEnabled()) {
        cacheExpiration = 0;
    }
    mFirebaseRemoteConfig.fetch(cacheExpiration).addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            FirebaseRemoteConfig.getInstance().activateFetched();
        }
    });
}

毕竟,您可以在需要的地方使用配置值:

FirebaseRemoteConfig.getInstance().getString("foo"); //Outputs bar
FirebaseRemoteConfig.getInstance().getBoolean("some_key"); //Outputs true
FirebaseRemoteConfig.getInstance().getLong("another_key"); // Outputs 2

关于android - FirebaseRemoteConfig getString 返回空但远程配置的字节数组不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52971807/

相关文章:

android - 生产中的 FirebaseRemoteConfigClientException (Android)

Firebase Remote Config 应用程序版本条件比较

Android的浏览器兼容性

android - 如何在android中创建共享 View

android - TextView 不滚动

swift - 如果用户在 Swift 中不活跃则发送推送通知

ios - Firebase 远程配置错误 8003,Unity,iOS

android - 如何在 Android init.rc 中读取和运行条件语句

javascript - Webstorm 无法识别 firebase.js(Firebase js API)

java - Android Studio 中的 Firestore 引用