내 IOS 응용 프로그램의 경우 현재 firebase 설명서의 권장 방법을 사용하여 사용자가 초기보기 컨트롤러에서 firebase를 통해 전자 메일 및 암호로 로그인했는지 확인하고 있습니다. 사용자가 로그인하지 않은 경우 아래 그림과 같이, 나는 그 때 내 로그인 화면을 제공 :App Delegate 또는 초기보기 컨트롤러, 사용자가 iOS 앱을 위해 Firebase를 통해 로그인했는지 확인하려면?
class InitialViewController: UIViewController {
var authHandle: FIRAuthStateDidChangeListenerHandle!
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
hasUserSignedIn()
}
func hasUserSignedIn() {
authHandle = FIRAuth.auth()?.addStateDidChangeListener { [unowned self] auth, user in
if user == nil {
self.perform(#selector(self.presentLogInSignUp), with: nil, afterDelay: 0)
}
}
}
그러나
, 사용자가 로그인하지 않은 경우 컨트롤러에서 로그가 발표되기 전에, 그들은 잠시 내 초기 뷰 컨트롤러를 참조, 이는 훌륭한 사용자 경험이 아닙니다. 이 문제를 해결하는 방법은 앱 대리인의 didFinishLaunchingWithOptions에 체크를 추가하는 것입니다.
첫 번째로, 사용자가 Firebase로 로그인했는지 확인하기 위해 App Delegate와 didFinishLaunchingWithOptions가 OK입니다 (FIRAppConfigure()). 내 이해에서 사용자의 Firebase 로그인 상태가 키 체인에 유지된다고 가정합니다. (정확합니까?)
둘째로, 앱 대리인이 사용자의 로그인 상태를 확인하기에 적절한 장소 인 경우 내 초기보기 컨트롤러 또는 아래의 메소드 에서처럼 권장 방법을 사용합니까? 후자의 장점은 리스너를 제거해야하는 것에 대해 걱정할 필요가 없지만 Firebase docs는이 메소드를 사용하여 auth 객체가 초기화를 완료하지 못할 수도 있다는 경고를 제공합니다.
if FIRAuth.auth()?.currentUser != nil {
// User is signed in.
// ...
} else {
// No user is signed in.
// ...
}
현재 잠재적 인 솔루션 : 나는 didFinishLaunchingWithOptions에서 권장되는 방법을 사용하고 난 그냥 didFinishLaunchingWithOptions 내에서 사용 후 처리기를 제거합니다.
Firebase는 정말 멋지 며 올바르게 구현하기를 기대합니다.
가능한 복제 (https://stackoverflow.com/questions/41531271/checking-firebase- 답변 현재 로그인 한 사용자에서 수신 대기자를 통해 수신) – Kqtr