이번 포스팅에서는 애플 아이디로 로그인하는 기능에 대해 알아보겠습니다. 본 포스팅은 DeveloperFury님의 글을 참조했습니다.
또한 애플 개발자 계정에서 키값이나 identifier 등을 설정하는 과정은 생략합니다.
애플 id로 로그인?
보통 앱 사용할 때 구글이나 페이스북, 네이버, 카카오 등 소셜 로그인을 통해 간단하게 가입할 수 있습니다. 애플 id로 로그인하는 것도 이와 동일하며, 작년 개발자 포럼에서 발표된 사항으로 알고 있습니다.
앱 자체 순수 로그인 기능이 아닌, 제 3의 소셜 로그인 기능을 사용하는 앱의 경우, 의무적으로 애플 id로 로그인을 만들 것을 심사 지침에서 확인하실 수 있습니다. 즉, 애플id로 로그인 없이 제 3의 소셜 로그인 기능만으로는 앱을 배포할 수 없습니다. (조금 헷갈리는 부분은, 앱 서비스 자체의 회원가입 기능이 있을 경우는 배포가 가능한지 여부입니다. 영문 지침에서 exclusively
라고 써놔있기 때문에... 해보신 분만 알 것 같네요.)
애플 아이디로 로그인할 때 필요한 부분?
소셜 로그인 기능을 사용할 때 필요한 것은, 해당 아이디에 대한 사용자 정보와 JWT 토큰키 발행을 위한 키값 정도일 겁니다. 이번 포스팅에서는 다음 사항을 확인하고 사용할 것입니다.
- 애플 id로 로그인 버튼 만들기
- 버튼 클릭 시, 로그인하는 화면 보여주기
- 로그인했을 때, 적합한 액션 취하기 (ex. 상세 가입페이지로 넘어간다.)
애플 id로 로그인
- stackView를 스토리보드에 하나 만들고, outlet으로 지정합니다. 이 때 스택뷰는 해당 버튼을 담을 그릇이 되니, 크기나 위치를 적절히 설정합니다.
- 클릭 시, 액션이 실행될 수 있도록 아래와 같이 함수를 만듭니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @IBOutlet var appleLoginStackView: UIStackView! func setLoginButton() { if #available(iOS 13.0, *) { let button = ASAuthorizationAppleIDButton() button.addTarget(self, action: #selector(appleIDLogin), for: .touchUpInside) self.appleLoginStackView.addArrangedSubview(button) } else { self.showToast(message: "애플 로그인은 iOS13 이상부터 사용이 가능합니다.") } } | cs |
버튼 클릭 시 실행될 함수는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @objc func appleIDLogin() { if #available(iOS 13.0, *) { let appleIDProvider = ASAuthorizationAppleIDProvider() let request = appleIDProvider.createRequest() request.requestedScopes = [.fullName, .email] let authorizationController = ASAuthorizationController(authorizationRequests: [request]) authorizationController.delegate = self authorizationController.presentationContextProvider = self authorizationController.performRequests() } else { // 구버젼 아이폰 유저들에게.. } } | cs |
extension을 이용해 다음과 같이 설정합니다. 코드에서 보시다시피, 원하는 뷰 컨트롤러로 이동하는 코드를 구성할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | extension ViewController: ASAuthorizationControllerDelegate { @available(iOS 13.0, *) func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) { if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential { // Create an account in your system. let userIdentifier = appleIDCredential.user let userFirstName = appleIDCredential.fullName?.givenName let userLastName = appleIDCredential.fullName?.familyName let userEmail = appleIDCredential.email let jwt = appleIDCredential.identityToken print(userIdentifier) print(userFirstName) print(userLastName) print(userEmail) print(jwt?.base64EncodedString()) // 아이디 결과를 통해 원하는 뷰컨트롤러로 이동하시면 됩니다. } else if let passwordCredential = authorization.credential as? ASPasswordCredential { // Sign in using an existing iCloud Keychain credential. let username = passwordCredential.user let password = passwordCredential.password print(username) print(password) //Navigate to other view controller } } @available(iOS 13.0, *) func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) { // handle Error. } } extension ViewControllerKakaoLogin: ASAuthorizationControllerPresentationContextProviding { @available(iOS 13.0, *) func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor { return self.view.window! } } | cs |
'Developer > iOS, Swift' 카테고리의 다른 글
[Swift] 서버에서 FCM 접근, iOS로 PUSH 푸시 보내기 (3) | 2020.02.27 |
---|---|
[Swift] 아래로 당겨서 새로고침 기능 (Scroll 후 Refresh하기) (0) | 2020.02.26 |
[Swift] UIActivityIndicator 예제 (로딩중 표시 띄우기) (0) | 2020.02.25 |
[Swift] 갤러리에 저장된 이미지 파일, 서버에 POST하기 (1) | 2020.02.24 |
[Swift] 이미지 라이브러리, KingFisher와 AlamofireImage (0) | 2020.02.19 |
댓글