Firebase Remote Config fetch doesn't update values from the Cloud
Asked Answered
C

6

18

I'm trying to set up Firebase Remote Config for my project. I added Firebase via the Assistant. I added values to the server values on Google Cloud Console:

1

I've created default values xml in res/xml

<defaultsMap>

<!-- Strings-->
<entry >
    <key>textView_send_text</key>
    <value >your phrase goes here.</value>
</entry>

</defaultsMap>

Thats my MainActivity:

final private FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();

protected void onCreate(Bundle savedInstanceState) {
    //..code..

    //fetch from Firebase
    fetchAll();
}

private void fetchAll(){
     final FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();

    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
            .setDeveloperModeEnabled(BuildConfig.DEBUG)
            .build();
    mFirebaseRemoteConfig.setConfigSettings(configSettings);

    mFirebaseRemoteConfig.setDefaults(R.xml.defaults);

    mFirebaseRemoteConfig.fetch()
            .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if(task.isSuccessful()){
                        Toast.makeText(MainActivity.this, "Fetch Succeeded",
                                Toast.LENGTH_SHORT).show();

                        mFirebaseRemoteConfig.activateFetched();
                    }else{
                        Toast.makeText(MainActivity.this, "Fetch Failed",
                                Toast.LENGTH_SHORT).show();
                    }

                    displayWelcomeMessage();

                }
            });





}

private void displayWelcomeMessage(){
    String welcomeMessage = mFirebaseRemoteConfig.getString("textView_send_text");

    Toast.makeText(this, welcomeMessage,
            Toast.LENGTH_SHORT).show();
}

Toast output:

2

So Toast gets the value from xml/defaults not from the Cloud. It'd be much appreciated if somebody found where I made a mistake.

Crosscrosslet answered 21/3, 2017 at 19:15 Comment(0)
D
30

For development testing, specify a cache expiration time of zero to force an immediate fetch:

mFirebaseRemoteConfig.fetch(0) // <- add the zero
        .addOnCompleteListener(this, new OnCompleteListener<Void>() {
            ...
        });
Daugherty answered 21/3, 2017 at 19:49 Comment(2)
dont do it too many times or you'll have a exception. i recommend the emulator so you can switch a few times if you reach the throttle limit.Ecbolic
Though it solves a problem, after several launches an application stops getting OnCompleteListener events.Supplejack
R
20

Some tips the helped to me:

  • Don't forget to click "publish changes" in Firebase console after each value update
  • Uninstall and install the App before checking (Firebase may not fetch immediately)
  • Use mFirebaseRemoteConfig.fetch(0)
Ria answered 18/6, 2018 at 14:45 Comment(3)
Point 2 was the thing I was missing, worked like a charm on iOSMadly
Reinstalling also worked for me. Can you please explain why reinstall is required? How can i make sure it is indeed updated without reinstall in production?Hoffman
@Hoffman reinstall required when you testing your app, since you don't want to wait. remote config will be updated in production, but not immediatelyRia
D
4

For what it worth I found that our firebase remote configs weren't downloading no matter what we tried - we are usually debugging while connected to a proxy (like Charles Proxy) and that was interrupting the firebase cloud update.

Once we connected to a non-proxied wifi connection we got the update.

You can also set your config to developer mode if running a debug build which will refresh values more often - but the proxy was our root problem.

FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
            .setDeveloperModeEnabled(BuildConfig.DEBUG)
            .build();
Durbin answered 6/12, 2018 at 17:29 Comment(2)
Were you ever able to find a solution for remote config while proxying? We were already enabling developer mode.Omeara
setDeveloperModeEnabled(boolean enabled) is deprecated now.Orleans
D
3

In Flutter, I just changed the value of minimumFetchInterval to const Duration(hours: 0). I manually added an message to firebase and here I just get it. Here is my code;

    await Firebase.initializeApp();
    RemoteConfig remoteConfig = RemoteConfig.instance;
    await remoteConfig.setConfigSettings(RemoteConfigSettings(
      fetchTimeout: const Duration(seconds: 10),
      minimumFetchInterval: const Duration(hours: 0),
    ));
    RemoteConfigValue(null, ValueSource.valueStatic);
    bool updated = await remoteConfig.fetchAndActivate();
    if (updated) {
      print("it is updated");
    } else {
      print("it is not updated");
    }
    print('my_message ${remoteConfig.getString('my_message')}');
Dogoodism answered 26/8, 2021 at 11:57 Comment(0)
P
0

Make sure your mFirebaseRemoteConfig.fetch() called only once. It gets throttled if you call it multiple times.

Pathogenesis answered 6/4, 2021 at 5:47 Comment(0)
H
0

There is a default minimum time duration Intervals for firebase remote config fetching. According to the Firebase documentation, it is now 12 hours. During that default time interval gap, if you change the keys from Firebase remote config and if you don't uninstall the app, you don't get updated data. you will get updated data after passing default time intervals. If you need more frequent data changes, you can override fetch intervals from client side.

Helotry answered 15/3, 2022 at 19:41 Comment(1)
While this link may answer the question, it is better to include the essential parts of the answer here and provide the link for reference. Link-only answers can become invalid if the linked page changes. - From ReviewSchleswig

© 2022 - 2024 — McMap. All rights reserved.