очень новый для ios разработки и Firebase.
Я реализовал стандартный поток пользовательского интерфейса, когда приложение открывается на экран Spla sh, где проверяется, вошел ли пользователь в систему или нет, и в зависимости от состояния пользователя перенаправлен на экран входа в систему или домашний экран. Я пытаюсь получить идентификатор пользователя от слушателя аутентификации, и некоторые из моих вызовов getUserId из userManager происходят до того, как аутентификация firebase дает ненулевой идентификатор пользователя, и пользователь всегда заканчивает тем, что идет к экрану регистрации. Хотелось бы узнать, каковы лучшие практики для реализации извлечения идентификатора пользователя со слушателями. Вот некоторый код для поддержки того, что я делаю
class UserManager {
static let shared = UserManager()
private var currentUserId: String?
private init() {
print("init initiated")
_ = Auth.auth().addStateDidChangeListener { (auth, user) in
if let user = user {
// User is signed in
print("user id is: \(user.uid)")
self.currentUserId = user.uid
print("current user id loaded: \(self.currentUserId)")
}
}
}
func getCurrentUserId() -> String?{
print("returning user id: \(currentUserId)")
return currentUserId
}
Вывод на печать из консоли выглядит примерно так: (Пользовательский запрос запускается до того, как состояние слушателя firebase изменится на ненулевое значение
nit initiated
returning user id: nil
nil
user id is: c0wTlE5EXaao3aO0rH9J6GKvuM43
current user id loaded: Optional("c0wTlE5EXaao3aO0rH9J6GKvuM43")
Я попытался инициализировать UserManager непосредственно из AppDelegate, надеясь, что к тому времени, когда остальная часть приложения запустит одноэлементный экземпляр usermanager, будет успешно получено последнее состояние, но, очевидно, это не работает .