How to implement fetch() from Firebase Remote Config in onStart() method?
Asked Answered
S

0

7

I'm trying to implement calling Firebase Remote Config fetch() method in onStart(). I thought it would be quite easy but after few attempts it isn't.

First of all, I want to check for new config values as soon as the user opens the app and cache expiration time was exceeded. That's why I chose onStart() method to do this.

At first I used standard approach:

//called in Activity onStart() method
public static void fetchRemoteConfigValues(Activity activity) { 
        long cacheExpirationInSeconds = 43200L;
        firebaseRemoteConfig.fetch(cacheExpirationInSeconds)
                .addOnSuccessListener(activity, new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        LOGD(TAG, "onSuccess: Fetch Succeeded");
                        FirebaseRemoteConfig.getInstance().activateFetched();

                    }
                })
                .addOnFailureListener(activity, new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        LOGE(TAG, "onFailure: Fetch Failed", e);
                    }
                });
}

Everything would work correct except that there is a situation when cache expiration time is exceeded and there is no Internet connection so onFailure is called. And now my question is:

  1. Why is this failure request increases throttle counter?

After few fetch() calls with no Internet FirebaseRemoteConfigFetchException turns in FirebaseRemoteConfigFetchThrottledException. And now even if Internet is available again I can't fetch data from the server because of throttle limit on.

My temporary workaround is checking Internet availability before calling fetch():

public static void fetchRemoteConfigValues(Activity activity) { 
    if (NetworkHelper.isNetworkAvailable(activity))
        long cacheExpirationInSeconds = 43200L;
        firebaseRemoteConfig.fetch(cacheExpirationInSeconds)
        (...)
    }
}

But it can cause some problems when connection is established but still no Internet / no server response.

  1. Is there a better solution / approach to my problem?
Socman answered 20/5, 2017 at 21:43 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.