Почему Firebase не отправляет обновленное значение для флага удаленной конфигурации, пока его временной интервал не будет передан в проекте iOS? - PullRequest
0 голосов
/ 03 апреля 2019

В проекте iOS мы решили включить функцию в качестве демонстрационного сценария только для некоторых пользователей из белого списка, чтобы реализовать это, после того как пользователь входит в приложение в LoginController, мы отправляем идентификатор пользователя в Firebase, используя эту * 1001.* и мы установили флаг удаленной конфигурации с несколькими условиями, при которых каждое условие проверяет определенный идентификатор пользователя, если он совпадает с идентификатором пользователя, отправляемым после процесса входа в Firebase, он возвращает true, в противном случае - false.Именно после отправки идентификатора пользователя в LoginController мы пытаемся извлечь флаг удаленной конфигурации

RCUtility.fetchAVFlagValue { result in
                    UserDefaults.standard.set(result, forKey: DefaultKeys.remoteConfigFlag)
                }

, а вот класс RCUtility

class RCUtility {

    static func fetchAVFlagValue(completion: @escaping (_ flag: Bool) -> Void) {
        #if DEBUG
        let fetchDuration: TimeInterval = 0
        activateDebugMode()
        #else
        let fetchDuration: TimeInterval = 3600
        #endif
        let remoteConfig = RemoteConfig.remoteConfig()
        remoteConfig.fetch(withExpirationDuration: fetchDuration) { _, error in
            if let error = error {
                print("Error fetching remote values: \(error)")
                return
            }

            remoteConfig.activateFetched()
            completion(remoteConfig
                .configValue(forKey: "auto_vision_flag")
                .boolValue)
        }
    }

    static func activateDebugMode() {
        let debugSettings = RemoteConfigSettings(developerModeEnabled: true)
        RemoteConfig.remoteConfig().configSettings = debugSettings
    }
}

проблема в том, что, пока я тестируюон находится в режиме отладки с интервалом времени 0, он работает правильно, когда, например, я захожу в систему как пользователь из белого списка, я вижу эту особую функцию, и когда я выхожу из системы и захожу как другой пользователь, не входящий в белый список, я не вижу эту функцию, но когда мы публикуемЭто не происходит, если они входят в систему как хороший пользователь, сначала они видят функцию, но если они выходят из системы и снова входят в систему как плохой пользователь, они все равно могут видеть функцию, которую, как они полагают, нет!если они не ждут 1 час (указанный интервал времени, чтобы получить новое значение для флага) или если они удаляют приложение, переустанавливают его и снова входят в систему!Кажется, FB не возвращает обновленное значение, если эти два условия не выполнены.

Я уверен, что флаг установлен в Firebase правильно.

Я пробовал разные способы, такие как активация флага после выборки из FB или попытка сброса значения из UserDefaults после выхода пользователя из приложения или сохранения значения в константе вместо использования UserDefaults, но ни один из нихсработало, я не уверен, что так работает FB с флагом удаленной конфигурации, или я что-то упустил?

Версия Android не имеет этой проблемы с той же реализацией и тем же временным интервалом, и независимо от режима отладки, производственного режима или типа пользователя, они получают правильное значение каждый раз из Firebase без необходимости удалять и переустанавливатьприложение.

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Механизм извлечения Remote Config, вероятно, ничего не знает о пользователе, а это означает, что он просто ожидает истечения срока действия кэша, который по умолчанию равен 12 часам.Также см. Документацию Firebase по кешированию .

. Я склонен считать это ошибкой, хотя я не уверен, что она работает так, как задумано.В любом случае, возможно, стоит подать отчет об ошибке .

В качестве обходного пути вы можете указать fetch запрашивать новые значения после обнаружения нового входа в систему, вызвав fetchWithExpirationDuration:completionHandler: сочень низкая продолжительность выдоха.Обязательно вызывайте этот вариант только после того, как новый пользователь войдет в систему, так как слишком частые вызовы могут привести к применению газа на стороне сервера.

0 голосов
/ 05 апреля 2019

Я провел несколько тестов и считаю, что это ошибка Firebase.В первом запросе я получаю старый результат, и после двух запросов я получаю обновление .

...