2025. 1. 9. 21:49ㆍiOS
애플 로그인 계정 연동 해제와 관련하여 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)")
}
}
이 코드에서는 애플 로그인 버튼을 생성하고, 사용자가
3. 애플 로그인에서 계정 연동 해제(로그아웃)의 중요한 점
- 애플 로그인에서는 명시적인 연동 해제 기능이 제공되지 않기 때문에, 로그아웃은 세션 정보와 사용자 정보를 삭제하는 방식으로 처리됩니다.
- **getCredentialState(forUserID:)**를 통해 로그인 상태를 체크하고, 로그아웃 시에는 앱 내에서 세션 정보를 관리하는 방법이 필요합니다.
- 애플 로그인은 사용자 개인 정보 보호를 중요시하므로, 로그아웃 시에 사용자 정보나 세션을 적절히 삭제하거나 초기화하는 작업이 필수입니다.
'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 |