FirebaseRemoteConfig getString returns empty but bytearray of remote config is not empty
Asked Answered
J

2

1

At first image, I stopped application where I try to get some data from FirebaseRemoteConfig. The code I evaluated is a simple code to get string from FirebaseRemoteConfig. But it returns empty string.

Then in second image I go a bit deep inside of FirebaseRemoteConfig object, and find out that the hashmap of zzogi.zzogw.get("configns:firebase") has what I need.

Why remoteConfig.getString() does not return my value even though remoteConfig have the value?

FYI this is gradle lines

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

and this is the code that I create FirebaseRemoteConfig Object. If you need more code, please ask.

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

Jaxartes answered 24/10, 2018 at 14:41 Comment(0)
B
2

You should add default values for all your config parameters. You can create a xml resource with a name config at xml folder for default values like this.

<?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>

You do not need to set config and defaults every time when you need a FirebaseRemoteConfig instance. Trigger this only once in onCreate method of your main activity.

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

And then fetch your overrides from server. You can trigger this at onResume. It wont check server until cacheExpiration timeouts. Also when you are in development mode cacheExpiration will be 0. No need to change code for production.

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

After all, your can reach your config values where you need:

FirebaseRemoteConfig.getInstance().getString("foo"); //Outputs bar
FirebaseRemoteConfig.getInstance().getBoolean("some_key"); //Outputs true
FirebaseRemoteConfig.getInstance().getLong("another_key"); // Outputs 2
Bedcover answered 8/11, 2018 at 19:49 Comment(0)
D
1

Try using:

firebaseRemoteConfig.fetchAndActivate().
Diu answered 26/7, 2021 at 9:17 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.