티스토리 뷰

 

안녕하세요 :]

퓨리입니다~

 

아래는 "Apple로 로그인"에 대한 지침이에요.

 

 

이로서 소셜 로그인을 사용하는 앱들은 무조건 Apple로 로그인하기 기능을 구현해야 합니다.

 

기존에 앱스토어에 등록되어 있는 앱은

유예 기간이 2020년 4월까지이며,

 

새로 앱스토어에 올리게 되는 앱은

즉시 구현해야 합니다.

 

그! 래! 서!

저도 공부 해야겠죠???

애플 로그인! ㅋㅋㅋㅋ

 

먼저,

프로젝트를 생성하고

 

프로젝트의 "Signing & Capabilities" 탭으로 이동하셔서

"+ Capability" 탭을 눌러주세요.

(잘 안보이는데 아래 사진에 파란 배경의 "All" 탭 옆에 있어요)

 

그리고 "Sign in with Apple"을 검색해서 추가해주세요!

 

 

그러면?

<ProjectName>.entitlements 라는 파일이 생성돼요.

 

 

다음으로, 로그인 버튼을 생성할게요.

만약 코드 기반으로 작성하신다면 바로 

ASAuthorizationAppleIDButton() 인스턴스를 생성하시면 됩니다.

 

코드 기반이 아닌

스토리보드 기반으로 코드를 작성하신다면

UIButton에 ASAuthorizationAppleIDButton Class를 참조하면 될 줄 알았는데?

안되더라고요 ㅋㅋㅋ

 

그래서 애플 예제 코드를 보니

StackView를 스토리보드에 올리고

StackView에 ASAuthorizationAppleIDButton() 인스턴스를 생성해서

addSubView를 해주더라고요.

 

그래서!

StoryBoard에 Vertical Type의 스택 뷰를 하나 만들었습니다.

 

 

그리고 버튼 인스턴스를 생성합니다.

"import AuthenticationServices" 필수!

 

 

자, Apple 로그인 버튼은 생성이 되었고

addTarget까지 구현해 줬습니다.

 

그러면 버튼이 눌렸을 때를 구현해야겠죠?

handleAuthorizationAppleIDButtonPress 메서드를 구현해 보겠습니다.

 

 

ASAuthorizationAppleIDProvider()를 생성합니다.

ASAuthorizationAppleIDProvider는 2개의 메서드 밖에 없네요.

createRequest()

getCredentialState()

 

 

createRequest()를 통해서 request를 생성하고요.

request의 requestedScopes를 설정합니다.

requestedScopes에는 fullName 하고 email 밖에 없어요..

이게 전부임....

 

 

그리고 authorizationController를 생성하고

performRequests를 요청합니다.

 

그리고 또 하나의 메서드를 만들어 줍니다.

performExistingAccountSetupFlows() 메서드인데요.

 

이건 아직 이해가 되지 않네요..

이해가 되는 대로 수정하겠습니다...ㅠㅠ

 

 

자, 위의 두 메서드를 보니

전부 delegate를 선언해놨네요.

그럼?

구현해야죠!

 

ASAuthorizationControllerDelegate와

ASAuthorizationControllerPresentationContextProviding을

구현할게요.

(이름 겁나 기네...)

 

먼저,

ASAuthorizationControllerDelegate을 볼게요.

주요 메서드가 2개인데요.

didCompleteWithAuthorization은 handle에 성공했을 때,

didCompletedWithError는 handle에 실패했을 때

호출되는 메서드입니다.

 

 

그렇다면 handle에 성공했을 때

어떠한 데이터들을 얻을 수 있을까요?

바로 아래의 데이터들을 얻는 것이 가능합니다.

"FullName(성, 이름), Email, UserIdentifier"

(따로 민감정보를 키체인으로 관리하는 코드는 작성하지 않았습니다.)

 

ASAuthorizationControllerPresentationContextProviding은

델리게이트에게 어떤 윈도우에서 사용자에게 콘텐츠를 제공해야 하는지 알려줍니다.

 

 

자! 이제

개발자 사이트로 이동을 할게요.

 

Certificates, Identifiers & Profiles로 가셔서

App ID를 등록해주세요.

 

그리고, "Sign in with Apple"에 체크해주세요.

 

 

 

 

그리고 Continue -> Register였나?

꼭 등록을 꼭 해주시고요!

(저는 Continue만 누르고 나왔는데.. 등록이 안 돼있어서 뭐지? 했어요..)

(그리고 프로젝트를 먼저 생성하고 빌드하면 자동으로 생성돼 있을 거예요.)

 

이제 정말 마지막!

자격 증명에 대한 내용이에요.

 

 

ASAuthorizationAppleIDCredential 마지막에서 얻은

userIdentifier를 사용하여

사용자의 자격 증명을 확인할 수 있어요.

 

getCredentialState (forUserID : completion :) 메서드를 호출하면

userIdentifier의 상태를 확인할 수 있어요.

 

CredentialState는 이렇게 4가지가 있네요.

 

 

revoked는 자격 증명이 취소되었을 때,

authorizd는 이미 자격 증명이 존재하는 경우,

notFound는 자격 증명이 존재하지 않는 경우예요.

 

씬 델리게이트에서 상황에 맞추어 화면 전환을 구현하면 될 것 같네요.

 

예를 들면

.notFound의 경우

로그인 화면으로 이동을 하고,

 

.authorized의 경우

이미 자격 증명이 되었으니

로그인을 건너 띄어도 될 것 같네요.

 

 

아직 사실 이해 안되는 부분이 조금 있어서..

더 알아보고 수정해야겠네요.

 

댓글