【发布时间】:2019-08-25 06:42:31
【问题描述】:
在一个 iOS 项目中,我们决定只为一些白名单用户打开一个功能作为演示目的场景来实现这一点,在用户登录到 LoginController 中的应用程序后,我们使用此功能将用户 ID 发送到 Firebase
Analytics.setUserProperty(id, forName: "ID")
我们已经设置了一个带有多个条件的远程配置标志,每个条件都检查一个特定的用户 ID,如果它与登录过程后发送到 Firebase 的用户 ID 相同,则返回 true,否则返回 false。
就在我们在 LoginController 中发送用户 ID 之后,我们尝试获取远程配置标志
RCUtility.fetchAVFlagValue { result in
UserDefaults.standard.set(result, forKey: DefaultKeys.remoteConfigFlag)
}
这里是RCUtility 类
class RCUtility {
static func fetchAVFlagValue(completion: @escaping (_ flag: Bool) -> Void) {
#if DEBUG
let fetchDuration: TimeInterval = 0
activateDebugMode()
#else
let fetchDuration: TimeInterval = 3600
#endif
let remoteConfig = RemoteConfig.remoteConfig()
remoteConfig.fetch(withExpirationDuration: fetchDuration) { _, error in
if let error = error {
print("Error fetching remote values: \(error)")
return
}
remoteConfig.activateFetched()
completion(remoteConfig
.configValue(forKey: "auto_vision_flag")
.boolValue)
}
}
static func activateDebugMode() {
let debugSettings = RemoteConfigSettings(developerModeEnabled: true)
RemoteConfig.remoteConfig().configSettings = debugSettings
}
}
问题是只要我在调试模式下对其进行测试,时间间隔为0 它可以正常工作,例如当我以白名单用户身份登录时,我看到了该特定功能,当我注销并以另一个非白名单用户身份登录时我不会看到该功能,但是当我们为 QA 发布应用程序时,如果他们首先以良好用户身份登录,他们会看到该功能,但如果他们以不良用户身份注销并再次登录,他们仍然可以看到该功能他们认为不是!除非他们等待 1 小时(为标志获取新值的指定时间间隔),或者如果他们删除应用程序并重新安装并再次登录!如果不满足这两个条件,FB 似乎不会返回更新的值。
我确信该标志已在 Firebase 中正确设置。
我尝试了不同的方法,例如在从 FB 获取后激活标志,或者尝试在用户退出应用程序后从 UserDefaults 重置值,或者将值保存在常量中而不是使用 UserDefaults,但它们都不起作用不确定FB使用远程配置标志的方式还是我遗漏了什么?
Android 版本不存在此问题,具有相同的实现和相同的时间间隔,并且无论调试或生产模式或用户类型如何,它们每次都从 Firebase 获得正确的值,而无需删除并重新安装应用程序。
【问题讨论】:
-
尝试减少持续时间:
let fetchDuration: TimeInterval = 10.
标签: swift firebase firebase-remote-config