Почему Firebase Remote Config не обновляет значения? - PullRequest
0 голосов
/ 21 января 2019

Я использую Firebase Remote Config, у меня проблемы с обновлением значений.Мои значения обновляются только в том случае, если я закрываю и перезапускаю приложение.

Но никогда, если мое приложение выходит на передний план.

Разработчик активирован без задержки кэширования.

класс AppDelegate: UIResponder, UIApplicationDelegate {

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

My Firebase Remote Config class:

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
        }
    }
}

Что не так?

РЕДАКТИРОВАТЬ после ответа Мосбы:

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 голосов
/ 21 января 2019

Ваша RCFirebaseValues область действия неверна, как только вы выйдете из application: didFinishLaunchingWithOptions:, она будет равна нулю, поэтому вы должны сохранять строгую ссылку на свой объект (создайте переменную в AppDelegate).

...