iOS/UIKit

[iOS] 앱 실행시 조건에 따라 다른 viewController로

유훈 | Yuhun 2022. 3. 2. 16:12
반응형

구글 로그인을 구현하다가 로그아웃을 하지 않으면 메인 페이지로, 로그인이 되어있지 않은 상태면 로그인 페이지로 가도록 구현하는데 고민을 했습니다. 

다음 포스팅을 참조해서 SceneDelegate의 scene에 구현하니 작동이 잘 되었습니다.

[iOS] StoryBoard를 쓰지 않고 코드로 작성하기

 

 

아래 구현은 google 로그인을 조건으로 작성한 코드이고 이를 응용하면 상황에 따른 시작 지점을 변경해줄 수 있을듯 합니다.

// SceneDelegate class

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

// 새로 작성해준 코드
// ---------------------------------------------------------------------------------------------------
	// 스토리보드를 가져옴
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
	
    // 구글 로그인 체크 (구글 문서에서 가져온 코드)
    GIDSignIn.sharedInstance.restorePreviousSignIn { user, error in
        guard let windowScene = (scene as? UIWindowScene) else { return }
        self.window = UIWindow(windowScene: windowScene)

        if error != nil || user == nil {
            // Show the app's signed-out state.
            print("로그인 실패")
			
            // 로그인이 되어있지 않으면 로그인 뷰 컨트롤러로 이동
            guard  let vcName = storyboard.instantiateViewController(withIdentifier: "LoginViewController") as? UINavigationController else {return}
            self.window?.rootViewController = vcName
            self.window?.makeKeyAndVisible()

        } else {
            // Show the app's signed-in state.
            print("로그인")
			
            // 로그인이 되어있으면 메인페이지로 구성해둔 tapBarController로 전환.
            guard  let vcName = storyboard.instantiateViewController(withIdentifier: "LoginTapBarController") as? UITabBarController else {return}
            self.window?.rootViewController = vcName
            self.window?.makeKeyAndVisible()
        }
    }
// ---------------------------------------------------------------------------------------------------

    guard let _ = (scene as? UIWindowScene) else { return }
}
반응형