0

Мне нужно проверить некоторые функции моего приложения только с ранее выбранной группой пользователей.Аудитория Firebase на основе свойств пользователя

Я создал Аудитория, где user_id exactly matches 123456. 123456 быть моим собственным ID.

В Удаленной конфигурации я создал Условие, соответствующее пользователям в Аудитории выше.

Затем я создал параметр в 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") 

и установить идентификатор пользователя:

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() и имел тот же результат. Любые предложения?

ответ

0

Я послал письмо в Firebase команде с просьбой оказать поддержку, и они сказали мне, что проблема была ошибка в Xcode 8 (.0 и .1) с помощью Swift. Обновление до последней версии, выпущенной сегодня, 8.2, исправило проблему.

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

Спасибо, Джорди, но это в основном то, что я делаю. Когда моя выборка завершается успешно, значения, которые должны быть получены как «истинные», являются «ложными». TBH, я не верю, что это что-то с моим кодом, но что-то с Firebase, которое возвращает неправильное значение для Аудитории. – Tchelow

+0

@Tchelow Я, должно быть, неправильно прочитал вопрос, мой плохой! –

Смежные вопросы