-
spotify 로그인 구현iOS/패스트캠퍼스(앱제작) 2022. 5. 15. 16:23
1. 기본 UI구성
더보기- LoginVC
import UIKit class LoginViewController: UIViewController { @IBOutlet weak var emailLoginBtn: UIButton! @IBOutlet weak var googleLoginBtn: UIButton! @IBOutlet weak var appleLoginBtn: UIButton! override func viewDidLoad() { [emailLoginBtn, googleLoginBtn, appleLoginBtn].forEach { $0?.layer.borderWidth = 1 $0?.layer.borderColor = UIColor.white.cgColor $0?.layer.cornerRadius = 30 } } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // Navigation Bar 숨기기 (첫화면 이므로) navigationController?.navigationBar.isHidden = true } @IBAction func googleLoginBtnTapped(_ sender: UIButton) { // Firebase 인증 } @IBAction func appleLoginBtnTapped(_ sender: UIButton) { } }
- EnterEmailVC
import UIKit class EnterEmailViewController: UIViewController { @IBOutlet weak var emailTextField: UITextField! @IBOutlet weak var passwordTextField: UITextField! @IBOutlet weak var errorMsgLabel: UILabel! @IBOutlet weak var nextBtn: UIButton! override func viewDidAppear(_ animated: Bool) { nextBtn.layer.cornerRadius = 30 nextBtn.isEnabled = false // 화면 첫 진입시 커서를 emailTextField로 설정 emailTextField.becomeFirstResponder() emailTextField.delegate = self passwordTextField.delegate = self } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // Navigation Bar 다시 보이기 navigationController?.navigationBar.isHidden = false } override func viewDidLoad() { super.viewDidLoad() } @IBAction func nextBtnTapped(_ sender: UIButton) { } } extension EnterEmailViewController: UITextFieldDelegate { // 이메일, 비밀번호 업력 후 return버튼 클릭 시 키보드 내리기 func textFieldShouldReturn(_ textField: UITextField) -> Bool { view.endEditing(true) return false } // 이메일, 비밀번호 입력 시 버튼 활성화 func textFieldDidEndEditing(_ textField: UITextField) { let isEmailEmpty = emailTextField.text == "" let isPwdEmpty = passwordTextField.text == "" nextBtn.isEnabled = !isEmailEmpty && !isPwdEmpty } }
- MainVC
import UIKit class MainViewController: UIViewController { @IBOutlet weak var welcomeLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() // 메인 진입 시 제스처 인식 안되도록 설정 navigationController?.interactivePopGestureRecognizer?.isEnabled = false } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) navigationController?.navigationBar.isHidden = true } @IBAction func logoutBtnTapped(_ sender: UIButton) { self.navigationController?.popToRootViewController(animated: true) } }
2. EnterEmailVC에서 이메일/비밀번호 입력시 회원가입 완료 -> MainVC로 진입
2.1 이후 동일 이메일/비밀번호로 로그인 시 MainVC로 진입
2.2 로그아웃
더보기- EnterEmailVC
@IBAction func nextBtnTapped(_ sender: UIButton) { // Firebase 이메일/비밀번호 인증 let email = emailTextField.text ?? "" let pwd = passwordTextField.text ?? "" // Firebase 인증 플랫폼에 전달 // 1) 신규 사용자 생성 Auth.auth().createUser(withEmail: email, password: pwd) { [weak self] authResult, error in guard let self = self else { return } // 에러 처리 if let error = error { let code = (error as NSError).code switch code { case 17007: // 이미 가입한 계정일때 // 로그인하기 self.loginUser(withEmail: email, password: pwd) default: self.errorMsgLabel.text = error.localizedDescription } } else { // 계정이 잘 생성되면 MainVC로 이동 self.showMainVC() } } } private func showMainVC() { let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) let mainViewController = storyboard.instantiateViewController(withIdentifier: "MainViewController") mainViewController.modalPresentationStyle = .fullScreen navigationController?.show(mainViewController, sender: nil) } private func loginUser(withEmail email:String, password: String) { Auth.auth().signIn(withEmail: email, password: password) { [weak self] _, error in guard let self = self else { return } if let error = error { self.errorMsgLabel.text = error.localizedDescription } else { self.showMainVC() } } }
- MainVC
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) navigationController?.navigationBar.isHidden = true let email = Auth.auth().currentUser?.email ?? "고객" welcomeLabel.text = "환영합니다. \(email)님" } // 로그아웃 구현 @IBAction func logoutBtnTapped(_ sender: UIButton) { let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() self.navigationController?.popToRootViewController(animated: true) } catch let signOutError as NSError { print(signOutError.description) } }
3. Google 로그인/로그아웃
더보기ㄴ
4. Apple 로그인/로그아웃
'iOS > 패스트캠퍼스(앱제작)' 카테고리의 다른 글
신용카드 추천 리스트 (0) 2022.06.14 코로나 현황판 앱 (0) 2022.05.08 날씨 앱 (0) 2022.05.08 타이머 앱 (0) 2022.05.08 일기장 앱 (0) 2022.04.20