Я использую базу данных Firebase в реальном времени в своем приложении для Android, где включено сохранение диска.
Когда пользователь открывает приложение в первый раз, когда я читаю статус авторизации, если это значение равно NULL, я показываю экран входа в систему, и после входа в систему я получаю username
, сохраненный для этого идентификатора пользователя в базе данных в реальном времени.
Если имя пользователя равно нулю, я покажу экран настройки username
, где он выберет для него уникальный username
. Проблема возникает, когда соединение прерывается на этапе настройки имени пользователя. username
еще не записан в базу данных, но когда он откроет приложение в следующий раз, username
не будет нулевым, поскольку база данных в реальном времени дает мне значение, хранящееся в кэше. Итак, я перехожу на домашний экран, но что если кто-то еще выберет то же имя пользователя на этом этапе?
Я поддерживаю двустороннее сопоставление между uid
и username
, как предлагается в этом ответе
Я не могу использовать транзакцию, потому что за один раз транзакция может быть выполнена только по одному пути, но в моем случае мне нужно автоматически обновить два пути.
У меня также настроены правила безопасности для поддержания уникального имени пользователя, но что делать с пользователями, которые уже перешли экран настройки имени пользователя.