Как реализовать fetch () из Firebase Remote Config в методе onStart ()?

Я пытаюсь реализовать вызов метода Firebase Remote Config fetch() в onStart(). Я думал, что это будет довольно просто, но после нескольких попыток это не так.

Прежде всего, я хочу проверить наличие новых значений конфигурации, как только пользователь откроет приложение и истечет срок действия кеша. Вот почему я выбрал для этого onStart() метод.

Сначала я использовал стандартный подход:

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

Все будет работать правильно, за исключением ситуации, когда истечет срок действия кеша и нет подключения к Интернету, поэтому вызывается onFailure. А теперь мой вопрос:

  1. Почему этот сбой запроса увеличивает счетчик газа?

После нескольких вызовов fetch () без Интернета FirebaseRemoteConfigFetchException превращается в FirebaseRemoteConfigFetchThrottledException. И теперь, даже если Интернет снова доступен, я не могу получить данные с сервера из-за ограничения газа.

Мой временный обходной путь - проверка доступности Интернета перед вызовом fetch ():

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

Но это может вызвать некоторые проблемы, когда соединение установлено, но по-прежнему нет Интернета / нет ответа сервера.

  1. Есть ли лучшее решение / подход к моей проблеме?

person AppiDevo    schedule 20.05.2017    source источник