Я пытаюсь реализовать вызов метода 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
. А теперь мой вопрос:
- Почему этот сбой запроса увеличивает счетчик газа?
После нескольких вызовов fetch () без Интернета FirebaseRemoteConfigFetchException
превращается в FirebaseRemoteConfigFetchThrottledException
. И теперь, даже если Интернет снова доступен, я не могу получить данные с сервера из-за ограничения газа.
Мой временный обходной путь - проверка доступности Интернета перед вызовом fetch ():
public static void fetchRemoteConfigValues(Activity activity) {
if (NetworkHelper.isNetworkAvailable(activity))
long cacheExpirationInSeconds = 43200L;
firebaseRemoteConfig.fetch(cacheExpirationInSeconds)
(...)
}
}
Но это может вызвать некоторые проблемы, когда соединение установлено, но по-прежнему нет Интернета / нет ответа сервера.
- Есть ли лучшее решение / подход к моей проблеме?