그대의 이름도 성도 난 필요없소
하지만 정말 나 원하는게 하나있소
니 전화번호~ 🤙🏻
안녕하세요. 오딘(Odin)입니다.
여러분 오랜만입니다~😁
제가 또 새로운 프로젝트를 하느라 블로그 작성을 쉬었는데요! ㅎㅎ
이번 프로젝트를 만들면서 알게되거나 어려웠던 부분들을 정리해보려고 합니다!!
아주 신기하고 재미난 것들이 많을거니 기대하셔도 좋습니다~
우선 첫번째로!!
Firebase Auth를 활용한 전화번호 인증입니다.
다양한 앱을 사용하다보면 휴대폰 인증을 통해 회원가입을 하는 경우가 있습니다.
저 또한 이번에 Firebase를 이용하여 전화번호 인증 작업을 하였는데요.
생각보다 간단하더라구요~!!
그러면 우리 같이 로그인 해볼까요??
FirebaseAuth 적용하기
Firebase Auth 사이트-> https://firebase.google.com/docs/auth/ios/phone-auth
(자세하게 잘 나와 있으서 이거 보고 하셔도 됩니당)
초기 setting
Firebase 초기 setting은 블로그에 작성해 두었으니 보고 작업하시면 될겁니다!!
-> https://odinios.tistory.com/11
package Product들 중에 다음 두 개는 꼭 체크해주세요~
ㅁ FirebaseAuth
ㅁ FirebaseMessaging
FirebaseAuth 전화 인증
전화번호 인증을 사용하려면 Firebase에서 전화번호 로그인 요청이 내 앱에서 발생한 것인지 확인할 수 있어야 합니다.
- Silent APN 알림 : 기기에서 처음으로 전화번호를 통해 사용자를 로그인 처리하면 Firebase 인증에서 사용자 모르게 기기로 푸시 알림을 전송하여 토큰을 보냅니다.
- iOS 8.0이상은 silent notification은 사용자의 권한요청이 필수가 아닙니다.
- reCAPTCHA 인증 : 사용자가 앱의 백그라운드 새로고침을 중지했거나 iOS 시뮬레이터에서 앱을 테스트하는 경우와 같이 자동 푸시 알림을 주고받을 수 없는 경우, Firebase 인증은 reCAPTCHA 인증을 사용하여 전화번호 로그인 과정을 완료합니다.
저희는 실제 Message로 인증번호를 받는 reCAPTCHA 방식으로 해보려고 합니다.
reCAPTCHA
1) GoogleService-Info.plist 구성 파일을 열고 REVERSED_CLIENT_ID 키를 복사합니다.
2) URL Type 에 새로운 구성표를 추가하고 URL Schemes에 붙여넣어 줍니다.
동작 Flow
FirebaseidToken을 받아 해당 토큰을 받는게 목표이며
받은 Token을 통해 서버에서 가입 현황, 로그인, 회원가입 등을 한다고 보시면 됩니다.
전화번호 입력 & VerificationID, 인증번호 받기
// 전화번호 입력하기 버튼 눌렀을 떄
PhoneAuthProvider.provider()
.verifyPhoneNumber(phoneNumber, uiDelegate: nil) { verificationID, error in
if let error = error {
self.showMessagePrompt(error.localizedDescription)
return
}
// 서버 통신 성공, verificationID를 저장
if let verificationID = verificationID {
LocalUserDefaults.shared.set(key: .verificationID, value: verificationID)
// 화면 전환
}
}
인증번호 입력 & FirebaseidToken 받기
let verificationID: String? = LocalUserDefaults.shared.value(key: .verificationID)
// FIRPhoneAuthCredential 객체 만들기
let credential = PhoneAuthProvider.provider().credential(
withVerificationID: verificationID!,
verificationCode: certificationNumber
)
Auth.auth().signIn(with: credential) { authData, error in
if let error = error {
guard let errorCode = (error as? NSError)?.code else {return}
print("errorCode: \(errorCode)")
}
// 성공시 CurrentUser IDTokenRefresh처리
let currentUser = Auth.auth().currentUser
currentUser?.getIDTokenForcingRefresh(true) { idToken, error in
if let error = error {
print(error)
return
}
// FirebaseidToken 받기 완료
LocalUserDefaults.shared.set(key: .FirebaseidToken, value: idToken)
}
}
성공 영상
참조
'iOS' 카테고리의 다른 글
[dev/iOS] 쿠키(Cookie), 세션(Session), 토큰(Token) 이란?? (0) | 2022.12.12 |
---|---|
[iOS] Firebase 를 활용한 push 알림 (Remote Notification) (0) | 2022.10.14 |
[iOS] Firebase 를 활용하기 & crashlytics 분석하기 (1) | 2022.10.11 |
[iOS] 미히 - May I help youth? (청년 지원 정책 Service) - 회고(1) (0) | 2022.10.05 |
[iOS] App SandBox란? (0) | 2022.08.29 |