2016-12-08 1 views
3

내 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는 정말 멋지 며 올바르게 구현하기를 기대합니다.

+1

가능한 복제 (https://stackoverflow.com/questions/41531271/checking-firebase- 답변 현재 로그인 한 사용자에서 수신 대기자를 통해 수신) – Kqtr

답변

1

그들은 잠시 내 초기 뷰 컨트롤러

그들은 초기 뷰 컨트롤러가 표시되지 않는 참조하십시오. 초기 뷰 컨트롤러가 제어하는 ​​뷰를보고 있습니다. 즉 코드가 표시 될 때까지 기다려야합니다.보기가 이미로드되었으며 표시 준비가되었습니다. 로그보기로 변경하기 전에 처음에 표시되는 이유입니다.

표시 할보기를 결정하는 논리는 그 전에 발생해야합니다.

하나의 옵션은 응용 프로그램에서 위임을 확인하고 해당 viewController를 didFinishLaunchingWithOptions 함수의 코드에서 인스턴스화하는 것입니다.

Main.storyboard를 보면 속성 관리자에서보기를 클릭 한 다음 오른쪽에있는 경우 Is Initial View Controller에 대한 체크 박스가 있습니다. 그것이 최초로 표시됩니다. 선택을 취소하면 코드에서 설정할 수 있습니다.

이 질문을 참조하십시오 [아이폰 OS에서 리스너를 통해 중포 기지 현재 로그인 한 사용자 확인]의

Programmatically set the initial view controller using Storyboards

관련 문제