为什么Firebase Remote Config不更新值?

时间:2019-01-21 13:25:17

标签: ios swift firebase firebase-remote-config

我正在使用Firebase Remote Config,但在更新值时遇到一些麻烦。 仅当我关闭并重新启动该应用程序后,我的值才会更新。

但是如果我的应用程序进入前台,则永远不会。

开发人员已激活,没有缓存延迟。

AppDelegate类:UIResponder,UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        FirebaseApp.configure()
        let _ = RCFirebaseValues.sharedInstance
    }
}

我的Firebase远程配置类:

enum ValueKey: String {
    case force_update
}

class RCFirebaseValues {

    static let sharedInstance = RCFirebaseValues()
    var loadingDoneCallback: (() -> ())?
    var fetchComplete: Bool = false

    private init() {    
        loadDefaultValues()
        fetchCloudValues()
    }

    func loadDefaultValues() {
       RemoteConfig.remoteConfig().setDefaults(fromPlist: "RemoteConfigDefaults")
    }

    func fetchCloudValues() {

        #if DEBUG
        let expirationDuration: TimeInterval = 0
        RemoteConfig.remoteConfig().configSettings = RemoteConfigSettings(developerModeEnabled: true)
        #else
        let expirationDuration: TimeInterval = 3600
        #endif

        RemoteConfig.remoteConfig().fetch(withExpirationDuration: expirationDuration) {
            [weak self] (status, error) in

            guard error == nil else {
                DLog(message:"Uh-oh. Got an error fetching remote values \(String(describing: error))")
                return
            }

            RemoteConfig.remoteConfig().activateFetched()

            self?.fetchComplete = true
            self?.loadingDoneCallback?()
        }
    }


    func bool(forKey key: ValueKey) -> Bool {
        return RemoteConfig.remoteConfig()[key.rawValue].boolValue
    }

    func string(forKey key: ValueKey) -> String {
        return RemoteConfig.remoteConfig()[key.rawValue].stringValue ?? ""
    }

    func double(forKey key: ValueKey) -> Double {
        if let numberValue = RemoteConfig.remoteConfig()[key.rawValue].numberValue {
            return numberValue.doubleValue
        } else {
            return 0.0
        }
    }
}

怎么了?

在Mosbah做出回应后进行编辑:

class AppDelegate: UIResponder, UIApplicationDelegate {

     var remoteConfig:RCFirebaseValues!

     func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
         FirebaseApp.configure()
         self. remoteConfig = RCFirebaseValues.sharedInstance
      }

}

1 个答案:

答案 0 :(得分:0)

您的RCFirebaseValues范围是错误的,一旦您退出application: didFinishLaunchingWithOptions:,它将为零,因此您应保持对对象的强烈引用(在AppDelegate上创建var)。