【问题标题】:Firebase audience based on user properties基于用户属性的 Firebase 受众
【发布时间】:2016-11-29 23:57:28
【问题描述】:

我需要使用之前选定的一组用户来测试我的应用的一些功能。

我在user_id exactly matches 123456 创建了一个受众群体。 123456 是我自己的 ID。

在远程配置中,我创建了一个匹配上面受众中的用户的条件。

然后我在远程配置中创建了一个名为feature_available 的参数,并为条件设置了一个返回值true。默认值为false

在我的应用中,我设置了 Firebase:

    FIRApp.configure()

    let remoteConfig = FIRRemoteConfig.remoteConfig()
    if let remoteConfigSettings = FIRRemoteConfigSettings(developerModeEnabled: false) {
        remoteConfig.configSettings = remoteConfigSettings
    }
    remoteConfig.setDefaultsFromPlistFileName("FirebaseRemoteConfigDefaults")

并设置用户ID:

    FIRAnalytics.setUserID("123456")

然后我从 Firebase 获取:

    var expirationDuration: Double
    // If in developer mode cacheExpiration is set to 0 so each fetch will retrieve values from the server.
    expirationDuration = remoteConfig.configSettings.isDeveloperModeEnabled ? 0 : 3600

    remoteConfig.fetch(withExpirationDuration: TimeInterval(expirationDuration)) { (status, error) -> Void in
        if status == .success {
            remoteConfig.activateFetched()
        } else {
            assertionFailure("Firebase config not fetched. Error \(error!.localizedDescription)")
        }
    }

我做的最后一件事是从 Firebase 获取值并检查我是否启用了该功能:

    let featureIsAvailable = remoteConfig["feature_available"].boolValue
    if featureIsAvailable { ... }

问题是每次从 Firebase 返回的值都是false,我无法让它返回与我创建的受众匹配的正确值。 我还尝试设置用户属性而不是使用 setUserID() 并得到相同的结果。 有什么建议吗?

【问题讨论】:

    标签: swift firebase analytics firebase-analytics firebase-remote-config


    【解决方案1】:

    我之前遇到过类似的问题,有时可能需要一段时间才能完成提取。配置成功修复后,需要检查该功能是否可用。希望这样的东西也适合你:

    var featureIsAvailable : Bool?
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        configureRemoteConfig()
        fetchConfig()      
    }
    
    func configureRemoteConfig() {
        remoteConfig = FIRRemoteConfig.remoteConfig()
        // Create Remote Config Setting to enable developer mode.
        // Fetching configs from the server is normally limited to 5 requests per hour.
        // Enabling developer mode allows many more requests to be made per hour, so developers
        // can test different config values during development.
        let remoteConfigSettings = FIRRemoteConfigSettings(developerModeEnabled: true)
        remoteConfig.configSettings = remoteConfigSettings!
        remoteConfig.setDefaultsFromPlistFileName("RemoteConfigDefaults")
    }
    
    func fetchConfig() {
        var expirationDuration: Double = 3600
        // If in developer mode cacheExpiration is set to 0 so each fetch will retrieve values from
        // the server.
        if (self.remoteConfig.configSettings.isDeveloperModeEnabled) {
            expirationDuration = 0
        }
    
        // cacheExpirationSeconds is set to cacheExpiration here, indicating that any previously
        // fetched and cached config would be considered expired because it would have been fetched
        // more than cacheExpiration seconds ago. Thus the next fetch would go to the server unless
        // throttling is in progress. The default expiration duration is 43200 (12 hours).
        remoteConfig.fetch(withExpirationDuration: expirationDuration) { (status, error) in
            if (status == .success) {
                print("Config fetched!")
                self.remoteConfig.activateFetched()
    
                let featureIsAvailable = self.remoteConfig["feature_available"]
    
                if (featureIsAvailable.source != .static) {
                    self.featureIsAvailable = featureIsAvailable.boolValue
                    print("should the feature be available?", featureIsAvailable!)
                }
            } else {
                print("Config not fetched")
                print("Error \(error)")
            }
            self.checkIfFeatureIsAvailable()
        }
    }
    
    func checkIfFeatureIsAvailable() {
        if featureIsAvailable == false {
            // Don't show new feature
        } else {
            // Show new feature
        }
    }
    

    【讨论】:

    • 感谢 Jordi,但这基本上就是我正在做的事情。当我的获取成功时,应该作为true 接收的值都是false。 TBH,我不认为这是我的代码的问题,而是 Firebase 的问题,它为受众返回了错误的值。
    • @Tchelow 我一定是把问题读错了,我的错!
    【解决方案2】:

    我向 Firebase 团队发送了一封电子邮件请求支持,他们告诉我问题是使用 Swift 的 Xcode 8(.0 和 .1)中的一个错误。 更新到今天发布的最新版本 8.2,修复了该问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      相关资源
      最近更新 更多