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

然后在第二张图片中,我深入了FirebaseRemoteConfig对象,发现zzogi.zzogw.get(“ configns:firebase”)的哈希图具有我所需要的。

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

仅供参考,这是gradle线

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;
}


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

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

最佳答案

您应该为所有配置参数添加默认值。您可以在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实例时设置config和默认值。在您的主要活动的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/

10-12 02:00