개발아 담하자

[iOS/Swift] Apple Login 구현하기 본문

📱 iOS

[iOS/Swift] Apple Login 구현하기

choidam 2020. 9. 11. 13:20

날 오지게 괴롭혔던 애플 로그인에 대해 알아봅시다~!

먼저 아래 페이지에서 발급받은 개발자 계정으로 로그인을 합니다.

developer.apple.com/account/#/welcome

 

로그인 - Apple

 

idmsa.apple.com

 

Identifier 발급받기

위의 Apple Developer Account 에서 Certificates, Identifiers & Profiles 에 들어갑니다.

 

Certificates, Identifiers & Profiles

왼 쪽 메뉴에서 Identifiers 를 누릅니다.

Identifier 추가를 위해 옆에 파란 플러스 버튼을 누릅니다.

APP ID 누르고 Continue~~

App 누르고 Continue~

Description 과 프로젝트의 Bundle ID를 입력합니다.

그리고 스크롤 내려서 Sign In With Apple 도 체크하고 Register 버튼을 누르면 Identifier 가 생성됩니다.

 

 

Register Key

이제 Key를 발급받을 차례입니다.  마찬가지로 옆에 플러스 버튼을 누릅니다.

key name 을 입력하고 Sign in with Apple 체크 후 옆에 Configure 버튼을 누릅니다.

여기에서 아까 생성한 AppID 를 누르고 Register 누르면 끝~

 

 

Sign in With Apple

플젝으로 들어가서 아까 작성한 Bundl Identifier 작성합니다.

그리고 위에 Capability 플러스 버튼을 누릅니다.

 

sign in with apple 을 검색하고 추가합니다. 그러면

짠~ 밑에 뭔가 추가 ㅎㅎ

이제 구현을 시작해봅시다.

 

@objc func clickAppleLogin(_ sender: UITapGestureRecognizer) {
       
}

이 메소드는 애플 로그인 버튼을 눌렀을 때 동작하는 코드입니다. 여기 안을 채우겠습니다

 

let request = ASAuthorizationAppleIDProvider().createRequest()
request.requestedScopes = [.fullName, .email]

let controller = ASAuthorizationController(authorizationRequests: [request])
controller.delegate = self as? ASAuthorizationControllerDelegate
controller.presentationContextProvider = self as? ASAuthorizationControllerPresentationContextProviding
controller.performRequests()

먼저 request 를 생성하고 request를  보내줄 controller 를 생성합니다.

그리고 performRequests() 로 요청을 보냅니다.

 

이제 결과를 받아오도록 Controller Delegate 를 만듭니다.

extension LoginVC: ASAuthorizationControllerDelegate {
    // 성공 후 동작
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        if let credential = authorization.credential as? ASAuthorizationAppleIDCredential {

            let idToken = credential.identityToken!
            let tokeStr = String(data: idToken, encoding: .utf8)
            print(tokeStr)

            guard let code = credential.authorizationCode else { return }
            let codeStr = String(data: code, encoding: .utf8)
            print(codeStr)

            let user = credential.user
            print(user)

        }
    }

    // 실패 후 동작
    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
        print("error")
    }
}

didCompleteWithAuthorization 은 성공 후 동작을, didCompleteWithError 는 실패 시 구현되는 동작입니다.

 

developer.apple.com/documentation/authenticationservices/asauthorizationappleidcredential

 

Apple Developer Documentation

 

developer.apple.com

위 공식문서를 보면 ASAuthorizationAppleIdCredential 에 대한 내용이 꼼꼼하게 나와있습니다.

 

이제 실행해봅시다~

apple login

성공! (로그인만) 성공!

이제 서버랑 연결해야지 ..^^ ㅠㅠ 신난다~