Firebase 를 통해서 AppleSignin기능 구현에 대한 설명
파이어 베이스 세팅 관련해서는 추후 다른 로그인 서비스 관련해서 포스팅 예정
이번 포스팅에서는 애플 로그인 관련된 코드만 다룰 예정





참고) baseviewController는 프로젝트 편의성을 위해서 만든거라 uiviewcontroller와 같음
class LoginViewController: BaseViewController, AuthUIDelegate,ASAuthorizationControllerDelegate {
@objc private func handleAppleSignIn() {
let appleIDProvider = ASAuthorizationAppleIDProvider()
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email]
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
authorizationController.delegate = self
authorizationController.presentationContextProvider = self
authorizationController.performRequests()
}
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
guard let appleIDToken = appleIDCredential.identityToken else {
print("Unable to fetch identity token")
return
}
guard let idTokenString = String(data: appleIDToken, encoding: .utf8) else {
print("Unable to serialize token string from data: \(appleIDToken.debugDescription)")
return
}
let credential = OAuthProvider.credential(withProviderID: "apple.com", idToken: idTokenString, rawNonce: nil)
Auth.auth().signIn(with: credential) { (authResult, error) in
if (error != nil) {
print(error?.localizedDescription)
return
}
print("User is signed in")
print("UserToken\(idTokenString)")
self.keychain.set(idTokenString, forKey: "idToken")
}
}
}
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
// Handle error.
print("Sign in with Apple errored: \(error)")
}
}
extension LoginViewController: ASAuthorizationControllerPresentationContextProviding {
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
// Apple 로그인 인증 창 띄우기
return self.view.window ?? UIWindow()
}
}