Search code examples
swiftfirebaseanalyticsfirebase-analyticsfirebase-remote-config

Firebase audience based on user properties


I need to test some features of my app with just a previously selected group of users.

I created an Audience where user_id exactly matches 123456. 123456 being my own ID.

In Remote Config I created a Condition that matches users in the Audience above.

Then I created a parameter in Remote Config called feature_available and for the condition, I set a return value of true. The Default value is false.

In my app I set up Firebase:

    FIRApp.configure()

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

And set the user ID:

    FIRAnalytics.setUserID("123456")

Then I fetch from 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)")
        }
    }

The last thing I do is to get the value from Firebase and check if I have the feature enable:

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

The problem is that every single time the value returns from Firebase it is false and I can't manage to get it to return the correct value that matches that Audience I created. I also tried to do it setting a user property instead of using setUserID() and had the same result. Any suggestions?


Solution

  • I sent an email to the Firebase team requesting support and they told me that the issue was a bug in Xcode 8(.0 and .1) using Swift. Updating to the latest version released today, 8.2, fixed the issue.