애플로그인 계정 연동해제

2025. 1. 9. 21:49iOS

반응형

애플 로그인 계정 연동 해제와 관련하여 Xcode에서 애플 로그인을 처리하는 방법에 대해 좀 더 자세히 설명하겠습니다. 애플 로그인은 사용자가 Apple ID로 인증하고 앱에서 사용할 수 있도록 하는 기능입니다. 애플 로그인 자체에는 명시적인 "계정 연동 해제" 기능은 없지만, 사용자가 앱에서 로그아웃을 할 수 있도록 처리할 수 있습니다.

여기서는 애플 로그인 계정 상태 체크로그아웃 구현을 어떻게 할 수 있는지에 대해 설명할 것입니다.


1. 애플 로그인 연동 해제 (로그아웃)

애플 로그인에서는 명시적으로 계정 연동 해제 기능을 제공하지 않습니다. 대신, 애플 로그인 상태를 확인하고, 사용자가 앱에서 로그아웃을 처리할 수 있습니다. 이는 Apple ID 로그인을 통해 얻은 사용자 정보세션을 초기화하거나 삭제하는 방식으로 진행됩니다.

1.1 Apple ID 로그인 상태 확인

애플 로그인에서 사용자 로그인 상태를 확인하려면 ASAuthorizationAppleIDProvider의 getCredentialState(forUserID:) 메서드를 사용합니다. 이 메서드는 사용자가 로그인 상태에 있는지, 로그아웃했는지 또는 계정이 취소되었는지를 확인할 수 있습니다.

다음은 사용자의 애플 로그인 상태를 확인하는 예시입니다.

 
import AuthenticationServices 

func checkAppleIDCredentialState() { 
	// Apple ID 로그인 정보를 가져옵니다. 
    let appleIDProvider = ASAuthorizationAppleIDProvider() 
    
    // 사용자의 Apple ID를 식별할 수 있는 userIdentifier가 필요합니다. 
    // 일반적으로 Apple 로그인 후 이 값을 저장해 두어야 합니다. 
    let userIdentifier = "사용자의AppleID" 
    
    // 실제 값으로 대체해야 합니다. 
    appleIDProvider.getCredentialState(forUserID: userIdentifier) { (credentialState, error) in 
    	switch credentialState { 
        case .authorized: print("사용자가 로그인 되어 있습니다.") // 로그인 상태일 때의 처리 
        case .revoked: print("사용자가 계정을 취소했습니다.") // 계정 취소 시 처리 
        case .notFound: print("사용자가 계정을 찾을 수 없습니다.") // 계정이 없거나 로그인이 되어 있지 않은 상태 
        default: break 
        } 
    } 
}
  • .authorized: 사용자가 애플 ID로 로그인된 상태입니다.
  • .revoked: 사용자가 계정을 취소했거나 연동을 끊었을 때 발생합니다.
  • .notFound: 애플 로그인 계정을 찾을 수 없거나, 사용자가 로그인하지 않은 상태입니다.

1.2 로그아웃 처리

애플 로그인에서는 명시적인 로그아웃 API가 없으므로, 사용자가 로그아웃하면 세션 정보사용자 정보를 지워야 합니다. 이를 위해 애플 로그인 후 받은 ASAuthorizationAppleIDCredential 객체에서 받은 userIdentifier를 통해 해당 사용자의 로그인 상태를 지울 수 있습니다.

아래는 앱 내에서 애플 로그인 상태를 초기화(로그아웃)하는 방법입니다.

import AuthenticationServices 

func logoutFromAppleID() { 
	// 사용자 정보 삭제 및 세션 초기화 
	// 예: UserDefaults에서 Apple ID 관련 정보 삭제 
	UserDefaults.standard.removeObject(forKey: "AppleIDUserIdentifier") 
    
    // 또는, 앱 내 세션 관리 방법에 따라 초기화 작업을 진행 
    // 예: 로그인 상태 관리 클래스에서 초기화 작업 수행 
    SessionManager.shared.logout() 
    
    // 애플 로그인 UI 다시 보여주기 
    showLoginUI() 
} 

// 로그인 UI를 다시 보이게 하는 예시 (로그아웃 후) 
func showLoginUI() { 
	let appleIDButton = ASAuthorizationAppleIDButton(type: .signIn, style: .black) 
    appleIDButton.frame = CGRect(x: 0, y: 0, width: 200, height: 50) 
    appleIDButton.addTarget(self, action: #selector(handleAppleLogin), for: .touchUpInside) 
    self.view.addSubview(appleIDButton) 
}

위 코드에서는 logoutFromAppleID 함수에서 사용자가 로그아웃할 때, 관련된 사용자 정보를 삭제하거나 세션을 초기화한 후, 애플 로그인 버튼을 다시 표시하는 UI를 구현하고 있습니다.


2. 애플 로그인 버튼 설정 및 로그인 처리

애플 로그인 버튼을 사용하려면 **ASAuthorizationAppleIDButton**을 설정하고, 사용자가 로그인하면 **ASAuthorizationControllerDelegate**를 사용하여 로그인 정보를 처리합니다.

2.1 애플 로그인 버튼 생성

 

2.2 애플 로그인 처리 (로그인 요청 및 응답 처리)

@objc func handleAppleLogin() { 
	let appleIDProvider = ASAuthorizationAppleIDProvider() 
    let request = appleIDProvider.createRequest() 
    request.requestedScopes = [.fullName, .email] 
    
    let authorizationController = ASAuthorizationController(authorizationRequests: [request]) 
    authorizationController.delegate = self 
    authorizationController.performRequests() 
} 

extension ViewController: ASAuthorizationControllerDelegate { 
	func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) { 
    	if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential { 
        	// Apple ID 로그인 성공 시, 사용자 정보 처리 
            let userIdentifier = appleIDCredential.user 
            let userFullName = appleIDCredential.fullName 
            let userEmail = appleIDCredential.email // 로그인 후, userIdentifier 등을 저장하여 추후 사용 가능 
            UserDefaults.standard.set(userIdentifier, forKey: "AppleIDUserIdentifier") 
            // 세션 처리 등 필요한 후속 작업 수행 
        } 
    } 
    
    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) { 
    	print("애플 로그인 오류: \(error.localizedDescription)") 
    } 
}
이 코드에서는 애플 로그인 버튼을 생성하고, 사용자가
로그인할 때 ASAuthorizationAppleIDProvider를 통해 로그인 요청을 보내며, 그 결과를 처리하는 방법을 설명하고 있습니다.

3. 애플 로그인에서 계정 연동 해제(로그아웃)의 중요한 점

  1. 애플 로그인에서는 명시적인 연동 해제 기능이 제공되지 않기 때문에, 로그아웃은 세션 정보와 사용자 정보를 삭제하는 방식으로 처리됩니다.
  2. **getCredentialState(forUserID:)**를 통해 로그인 상태를 체크하고, 로그아웃 시에는 앱 내에서 세션 정보를 관리하는 방법이 필요합니다.
  3. 애플 로그인은 사용자 개인 정보 보호를 중요시하므로, 로그아웃 시에 사용자 정보세션을 적절히 삭제하거나 초기화하는 작업이 필수입니다.
반응형

'iOS' 카테고리의 다른 글

[RxSwift] zip, combineLate  (1) 2025.01.09
[RxSwift] Button rx.tap  (2) 2025.01.09
iOS Universal Links (유니버셜 링크)  (1) 2025.01.09
구글로그인 해제  (0) 2025.01.09
radix : 진수변환  (0) 2024.08.09