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

16,900

Solution 1

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

Solution 2

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)

Solution 3

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

Solution 4

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')}');
Share:
16,900
Furetur
Author by

Furetur

typescript

Updated on June 08, 2022

Comments

  • Furetur
    Furetur about 2 years

    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.

  • j2emanue
    j2emanue almost 7 years
    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.
  • CoolMind
    CoolMind over 5 years
    Though it solves a problem, after several launches an application stops getting OnCompleteListener events.
  • flopshot
    flopshot over 5 years
    Were you ever able to find a solution for remote config while proxying? We were already enabling developer mode.
  • Arpit J.
    Arpit J. over 4 years
    setDeveloperModeEnabled(boolean enabled) is deprecated now.
  • NSExceptional
    NSExceptional over 4 years
    Point 2 was the thing I was missing, worked like a charm on iOS
  • 4ntoine
    4ntoine over 3 years
    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?
  • Pavel Poley
    Pavel Poley over 3 years
    @4ntoine reinstall required when you testing your app, since you don't want to wait. remote config will be updated in production, but not immediately