3

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

3 回答 3

11

经过大量的试验和错误,我想通了。问题出在过期值上,将过期值设置为0秒即可看到立即生效的效果!

我希望这可以为其他人节省很多时间!

于 2017-04-01T04:05:15.513 回答
2

正如@Sunil Phani Manne 所提到的,使用具有过期值的方法确实有效并强制remoteConfig 立即激活。

    self.remoteConfig?.fetch(withExpirationDuration: 0.0, completionHandler: { (status, error) in
        let result = self.remoteConfig?.activateFetched()
        print(result)
    })
于 2019-04-13T11:38:43.143 回答
2

使用remote.activateFetched()失败,但使用FIRRemoteConfig.remoteConfig().activateFetched()成功。也许谷歌希望我们remoteConfig()每次都使用而不是坚持一个特定的实例。

此外,查看文档提到如果之前已经应用了获取的设置,这实际上会失败。

如果没有找到 Fetched Config,或者 Fetched Config 已经被激活,则返回 false 。

于 2017-03-14T07:39:56.700 回答