背景
我尝试使用 Google 的新 Firebase 服务进行 A/B 测试。为此,我们需要同时使用 Firebase Analytics 和 Firebase RemoteConfig。
问题
使用 FireBase RemoteConfig,我想从服务器获取变量(每个实验的每个变体都有不同的值),但似乎在某些设备上它卡在那里,而不是调用它的回调 (OnCompleteListener.onComplete) 。
我使用了与示例(此处)大致相同的代码:
// init:
boolean isDebug = ... ;
mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder().setDeveloperModeEnabled(isDebug).build();
mFirebaseRemoteConfig.setConfigSettings(configSettings);
final HashMap<String, Object> defaults = new HashMap<>();
for (...)
defaults.put(...);
mFirebaseRemoteConfig.setDefaults(defaults);
//fetching the variables:
long cacheExpiration = isDebug ? 0 : java.util.concurrent.TimeUnit.HOURS.toSeconds(1);
mFirebaseRemoteConfig.fetch(cacheExpiration).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
//on some devices, I never get here at all
if (task.isSuccessful()) {
mFirebaseRemoteConfig.activateFetched();
final FirebaseAnalytics firebaseAnalytics = FirebaseAnalytics.getInstance(context);
for (...) {
String experimentVariantValue = mFirebaseRemoteConfig.getString(...);
firebaseAnalytics.setUserProperty(..., experimentVariantValue);
}
} else {
}
}
});
事情是,回调不会被调用,但仅在某些设备上:
- 带有 Android 6.0.1 的 Nexus 5:几乎总是成功。
- Nexus 4 与 Android 5.1.1 和 LG G2 与 Android 4.2.2 :几乎总是冻结(意味着他们没有进入回调)
我还发现,当它起作用时,它会在之后的近期会话中起作用。
问题
为什么会发生?我能做些什么来解决这个问题?