Open samsung-ga opened 2 years ago
다수의 소셜 로그인 방법이 존재하기 때문에 코드가 복잡해질 것을 방지하기 위해여 애플 로그인만을 담당하는 Manager를 별도로 생성하는 방법
AppleLoginManager.swift
protocol AppleLoginManagerDelegate: AnyObject {
func appleLoginFail()
func appleLoginSuccess()
}
final class AppleLoginManager: NSObject {
weak var viewController: UIViewController?
weak var delegate: AppleLoginManagerDelegate?
func setAppleLoginPresentationAnchorView(_ viewController: UIViewController) {
self.viewController = viewController
}
}
extension AppleLoginManager: ASAuthorizationControllerPresentationContextProviding {
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
return viewController!.view.window!
}
}
extension AppleLoginManager: ASAuthorizationControllerDelegate {
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
let userIdentifier = appleIDCredential.user
let userName = appleIDCredential.fullName
let userEmail = appleIDCredential.email
delegate?.appleLoginSuccess()
}
}
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
delegate?.appleLoginFail()
}
}
Sign In with Apple
iOS 13.0+ | Xcode 11.3+ 이후부터 사용 가능
🚀 개념 설명
🚀 사용법
1. Capability 추가
Xcode Project의 Signing & Capabilites를 열어 왼쪽 상단의 + Capability를 선택한다.
이후 Sign In with Apple을 검색하여 클릭하여 추가한다.
위 Xcode Project에서 Capabilites를 추가하면 자동으로 Apple Developer에도 추가가 되지만, 만일 되지 않았다면 아래 방법을 진행한다.
Apple Developer - Certificates, Identifiers & Profiles 메뉴에서 애플로그인을 추가할 앱에 아래와 같이 Sign in with Apple을 선택한다.
2. 버튼 추가하기
ASAuthorizationAppleIDButton
클래스를 사용하여 시스템이 제공해 주는 로그인 버튼을 생성하는 방법이 있다.3. Apple Login 인증 창 띄우기
아래 코드를 작성한다.
performRequests()
를 통해 요청을 보낸다.ASAuthorizationControllerPresentationContextProviding
프로토콜을 채택하고 인증창을 띄워야 할 뷰의 window를 반환한다.4. Apple Login 인증 결과 다루기
ASAuthorizationControllerDelegate
를 채택한다.didCompleteWithAuthorization
, 실패하면didCompleteWithAuthorization
가 호출된다.5. 세션 변경 처리하기 & 자동 로그인
appleIDCredential.user
를 통해 현재 어떤 인증 상태인지 알 수 있다.scene
메서드와sceneDidBecomeActive
메서드에서 처리해야 한다.🚀 몇가지 객체 정의
ASAuthorizationAppleIDButton
: 애플에서 제공해주는 Apple Login 버튼 객체ASAuthorizationAppleIDProvider
: Apple ID를 기반으로 사용자 인증 요청을 생성하는 메커니즘를 담고 있는 객체 | request를 만들기 위해 provider 객체를 생성하고, request를 이용하여ASAuthorizationController
를 생성한다.ASAuthorizationController
:provider
객체에 의해 생성된 권한 요청을 관리하는 controller 객체Reference