即使实验已经完成、数据已被清除且应用重新安装,仍然能够获取Firebase A/B测试的变体值
在 Firebase -> Remote Config -> A/B Tests 部分,我们有一个在146天前创建的实验。它被标记为完成,但在iOS上我们仍然看到来自该实验中定义变体的值。然后我们删除了该实验并重新安装应用。我们仍然看到来自实验变体的相同值。我们以为是缓存的问题。因此,我们等到第二天。结果仍然从实验获取值。
我在Xcode中,在 fetch 或 fetchAndActivate 结束的那一行设置了断点,并查看了 remoteConfig 对象 -> _configExperiment 字段 -> _experimentPayloads 只有一个元素的数组。该载荷元素是一个JSON:
{
"experimentId": "_exp_4",
"variantId": "0",
"experimentStartTime": "2025-11-26T15:42:41.738Z",
"triggerTimeoutMillis": "15552000000",
"timeToLiveMillis": "15552000000"
}
exp_4 是我们正在接收值的实验名称。开始时间与我们启动该实验的日期相同。TimeToLive (TTL) 是180天。看起来在34天后,我们就能获得非来自该实验的常规数值。
Firebase的行为是否是有意为之:在实验完成并且被删除后,仍然继续向我们发送来自实验的值?还是因为应用端的某些问题?如果是,请该如何修复?
我在 Google Groups关于此行为的讨论 中发现,似乎谷歌的一名员工表示我们不应该继续从实验接收值。
另外这里有一个 讨论,其中有人说在实验结束前用户不会离开A/B测试。但“结束”是什么意思?是等180天过去吗?
我们使用 Cordova、Objective-C、插件 cordova-plugin-firebase-config,以及版本为 10.29.0 的pod Firebase/RemoteConfig。
解决方案
看起来这像是Firebase的一个bug。
我们尝试做 fetch + activate,尝试做 fetchAndActivate、尝试 FirebaseInstallations.delete。都没有用。
然后我们创建了一个新实验,从中接收值,手动停止它(它进入了 'Complete' 状态),并没有等到自动达到90天。结果就起作用了。停止该实验并重新安装应用后(不确定单纯重启是否足够),我们不再从任何实验接收值(那时没有活跃的实验,所以一切都很完美)。