Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
LeeJongNam7 committed Dec 24, 2024
2 parents 9939555 + 7e5616e commit 70ff993
Showing 1 changed file with 77 additions and 20 deletions.
97 changes: 77 additions & 20 deletions DateSpot/DateSpot/Controller/LoginViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import UIKit
import AuthenticationServices // Apple Login
import GoogleSignIn // Google Login

class LoginViewController: UIViewController {
class LoginViewController: UIViewController, ASAuthorizationControllerDelegate, ASAuthorizationControllerPresentationContextProviding {

// MARK: - Properties
// Google 로그인 버튼
Expand All @@ -34,7 +34,6 @@ class LoginViewController: UIViewController {
// MARK: - Google
/// Google 로그인 버튼 구성 및 레이아웃 설정
private func setupGoogleLoginButton() {

// 이미지 추가
let googleLogo = UIImage(named: "google") // 로컬 이미지 사용
googleButton.setImage(googleLogo, for: .normal)
Expand All @@ -57,27 +56,89 @@ class LoginViewController: UIViewController {
// MARK: - Apple
/// Apple 로그인 버튼 구성 및 레이아웃 설정
private func setupAppleLoginButton() {
// Apple 버튼 Auto Layout 활성화
authorizationAppleIDButton.translatesAutoresizingMaskIntoConstraints = false
authorizationAppleIDButton.addTarget(self, action: #selector(handleAuthorizationAppleIDButton(_:)), for: .touchUpInside) // 버튼 동작 설정
view.addSubview(authorizationAppleIDButton)

// Apple 버튼 제약 조건 설정
let appleLoginButton = ASAuthorizationAppleIDButton(type: .signIn, style: .whiteOutline)
appleLoginButton.translatesAutoresizingMaskIntoConstraints = false
appleLoginButton.addTarget(self, action: #selector(handleAuthorizationAppleIDButtonPress), for: .touchUpInside)

// 버튼을 화면에 추가
self.view.addSubview(appleLoginButton)

// 오토레이아웃 설정
NSLayoutConstraint.activate([
authorizationAppleIDButton.centerXAnchor.constraint(equalTo: view.centerXAnchor), // 화면 중앙에 정렬
authorizationAppleIDButton.topAnchor.constraint(equalTo: googleButton.bottomAnchor, constant: 20), // Google 버튼 아래로 20pt
authorizationAppleIDButton.widthAnchor.constraint(equalToConstant: 200), // 버튼 너비 200pt
authorizationAppleIDButton.heightAnchor.constraint(equalToConstant: 50) // 버튼 높이 50pt
appleLoginButton.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
appleLoginButton.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
appleLoginButton.heightAnchor.constraint(equalToConstant: 50),
appleLoginButton.widthAnchor.constraint(equalToConstant: 300)
])
}

// MARK: - Selectors
/// Apple 로그인 버튼 동작 처리
@objc private func handleAuthorizationAppleIDButton(_ sender: ASAuthorizationAppleIDButton) {
print("Apple Login Button Tapped")
// 여기에 Apple 로그인 처리 로직 추가
@objc func handleAuthorizationAppleIDButtonPress() {
let appleIDProvider = ASAuthorizationAppleIDProvider()
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email] // 사용자 이름과 이메일 요청

let authorizationController = ASAuthorizationController(authorizationRequests: [request])
authorizationController.delegate = self // 결과 처리 delegate 연결
authorizationController.presentationContextProvider = self // 현재 화면 context 제공
authorizationController.performRequests() // 애플 로그인 요청 시작
}

// MARK: - ASAuthorizationControllerDelegate
/// Apple 로그인 인증 성공 처리
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
switch authorization.credential {

case let appleIDCredential as ASAuthorizationAppleIDCredential:
let userIdentifier = appleIDCredential.user
let fullName = appleIDCredential.fullName
let email = appleIDCredential.email

print("User Identifier: \(userIdentifier)")
print("Full Name: \(String(describing: fullName))")
print("Email: \(email ?? "None")")

// UserDefaults에 사용자 정보 저장
let defaults = UserDefaults.standard

// 이름 저장 (Optional 처리)
if let givenName = fullName?.givenName, let familyName = fullName?.familyName {
let completeName = "\(givenName) \(familyName)"
defaults.set(completeName, forKey: "fullName")
print("Saved Full Name: \(completeName)")
} else {
defaults.set("", forKey: "fullName") // 이름이 없을 경우 빈 문자열 저장
print("Saved Full Name as empty string")
}

// 이메일 저장
if let email = email {
defaults.set(email, forKey: "email")
print("Saved Email: \(email)")
} else {
defaults.set("", forKey: "email") // 이메일이 없을 경우 빈 문자열 저장
print("Saved Email as empty string")
}

default:
print("Apple Login did not return valid credentials.")
}
}

/// Apple 로그인 인증 실패 처리
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
print("Apple Login Failed: \(error.localizedDescription)")
}

// MARK: - ASAuthorizationControllerPresentationContextProviding
/// Apple 로그인 창을 표시할 윈도우 지정
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
return self.view.window!
}

// MARK: - Google
/// Google 로그인 처리
@objc private func handleGoogleSignIn() {
GIDSignIn.sharedInstance.signIn(withPresenting: self) { result, error in
if let error = error {
Expand Down Expand Up @@ -118,8 +179,4 @@ class LoginViewController: UIViewController {
}
}
}




} // LoginViewController
}

0 comments on commit 70ff993

Please sign in to comment.