Firebase远程配置在发布中的缓存过期时间

20

我正在尝试通过将开发者模式设置为false来设置Firebase远程配置的发布模式。但是如果缓存过期时间少于3000(可能会稍微少一点,这是通过实验确定的)秒,则无法获取数据。它将抛出FirebaseRemoteConfigFetchThrottledException异常。

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

通过使用.setDeveloperModeEnabled(true),我可以设置任何时间,甚至是0,并且它能够正常工作。

这里是完整代码:

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

你能否解释一下问题是什么?


以下博客文章链接包含了您所有问题的答案。默认缓存时间为12小时。在开始从服务器端受到限制之前,setDeveloperModeEnabled(true)仅适用于最多10个设备。详情请参见:https://firebase.googleblog.com/2017/01/firebase-remote-config-loading.html。 - prerak
1个回答

34

远程配置实现了客户端限流机制,以防止有缺陷或恶意的客户端向 Firebase 服务器发送高频率的获取请求。有一位用户报告说限制是每小时五个请求。虽然我确认了五次快速获取将激活限流,但我没有在任何地方找到限制的说明。

配置值的缓存在文档中有解释。由于限流限制,您的发布应用程序无法立即看到远程配置值的更改。缓存的值将保留,直到下一次允许获取。默认的缓存过期时间为12小时。


1
文档现在支持每小时5个请求的说法:“限流是通过SDK内部完成的。在60分钟窗口期内,应用程序最多可以获取5次,然后SDK开始限流并返回FirebaseRemoteConfigFetchThrottledException。” - Four
1
他们已经改变了想法:“在 SDK 版本 6.3.0 之前,60 分钟窗口期内的限制是 5 个获取请求(更新版本具有更宽松的限制)”。 - Simas
2
你知道这个“60分钟内的5次获取”是计算我应用程序在所有设备上的所有调用,还是每个安装了该应用程序的设备都有一个计数器? - cesarsicas
我也想知道,有人知道吗? - Taha Malik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接