Firebase remote config cache expiration time in release

20,155

Remote Config implements client-side throttling to prevent buggy or malicious clients from blasting the Firebase servers with high frequency fetch requests. One user has reported the limit is five requests per hour. I haven't found the limit documented anywhere, although I have confirmed that five rapid fetches will activate throttling.

The caching of configuration values is explained in the documentation. Because of the throttling limits, it is not possible for your released app to immediately see changes in Remote Config values. Cached values will be used until the next fetch is allowed. The default cache expiration is 12 hours.

Share:
20,155
YTerle
Author by

YTerle

Updated on December 10, 2020

Comments

  • YTerle
    YTerle over 3 years

    I'm trying to setup firebase remote config for release mode by setting developer mode to false. But with cache expiration time less then 3000(may be a bit less, determined it experimentally) seconds, it fails to fetch data. It throws FirebaseRemoteConfigFetchThrottledException

    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
                            .setDeveloperModeEnabled(false)
                            .build();
    

    And with .setDeveloperModeEnabled(true) it allows me to set any time even 0 and works well.

    Here is whole hunk:

    new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
                FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
                        .setDeveloperModeEnabled(false)
                        .build();
    
                mFirebaseRemoteConfig.setConfigSettings(configSettings);
                mFirebaseRemoteConfig.setDefaults(R.xml.remote_config_defaults);
    
                mFirebaseRemoteConfig.fetch(CACHE_EXPIRATION)
                        .addOnSuccessListener(new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void aVoid) {
                                Log.i("info32", "remote config succeeded");
                                mFirebaseRemoteConfig.activateFetched();
                            }
                        })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception exception) {
                                Log.i("info32", "remote config failed");
                            }
                        });
            }
        }, 0);
    

    Could you please explain what the issue is?