如何在onStart()方法中实现Firebase远程配置中的fetch()?

App*_*evo 7 android throttling firebase firebase-remote-config

我正在尝试实现调用Firebase远程配置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);
                    }
                });
}
Run Code Online (Sandbox Code Playgroud)

除非存在超出缓存过期时间并且没有因特网连接而onFailure被调用的情况,否则一切都将正常工作.现在我的问题是:

  1. 为什么这个失败请求会增加油门计数器?

几次fetch()调用之后没有互联网FirebaseRemoteConfigFetchException接入FirebaseRemoteConfigFetchThrottledException.现在,即使互联网再次可用,由于节流限制,我也无法从服务器获取数据.

我的临时解决方法是在调用fetch()之前检查Internet可用性:

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

但是,当建立连接但仍然没有Internet /没有服务器响应时,它可能会导致一些问题.

  1. 我的问题是否有更好的解决方案/方法?