Firebase受众群体基于用户属性

时间:2016-11-29 23:57:28

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

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

我创建了一个user_id exactly matches 123456的受众群体。 123456是我自己的身份证。

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

然后我在Remote Config中创建了一个名为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()并且具有相同的结果。 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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