FIRRemoteConfig.activateFetched()失败

时间:2017-03-13 08:21:33

标签: ios swift firebase firebase-remote-config

我已经实现了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)")
        }
    })

3 个答案:

答案 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)
    })