我已经实现了FIRRemoteConfig并在firebase控制台中添加了我的第一个值。但是,当我尝试激活获取的值时,它会失败并且我的远程值永远不可用。
let remote = FIRRemoteConfig.remoteConfig()
#if DEBUG
let expiration: TimeInterval = 0
remote.configSettings = FIRRemoteConfigSettings(developerModeEnabled: true)
#else
let expiration: TimeInterval = 24*60*60
#endif
var map = [String:NSObject]()
let defaults = RemoteSettings.defaults.keys
for key in defaults.keys {
map[key.rawValue] = defaults[key] as? NSObject
}
remote.setDefaults(map) // Have confirmed that map is valid here
remote.fetch(withExpirationDuration: expiration, completionHandler: { (status, error) in
// status always == .success, but remote.activateFetched() always returns false.
if status == .success && remote.activateFetched() {
print("applied remote settings")
} else {
print("failed to apply remote settings: \(error)")
}
})
答案 0 :(得分:8)
经过大量的反复试验后,我想通了。问题在于到期值,将到期值设置为0秒以查看立即生效的结果!
我希望这可以为其他人节省很多时间!
答案 1 :(得分:2)
使用remote.activateFetched()
失败,但使用FIRRemoteConfig.remoteConfig().activateFetched()
成功。也许谷歌希望我们每次都使用remoteConfig()
而不是保留特定的实例。
此外,看一下文档提到如果先前已经应用了提取的设置,这实际上会失败。
如果未找到Fetched Config,或已激活Fetched Config ,则返回false。
答案 2 :(得分:0)
正如@Sunil Phani Manne所提到的,使用具有到期值的方法确实有效,并迫使remoteConfig立即激活。
self.remoteConfig?.fetch(withExpirationDuration: 0.0, completionHandler: { (status, error) in
let result = self.remoteConfig?.activateFetched()
print(result)
})