일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- environmentobjet
- arkit
- combine
- state
- fullscreencover
- Performance
- swift
- realitykit
- SwiftUI
- auth
- iphone
- ios
- 네트워크
- gesture
- withAnimation
- WWDC
- stateobject
- CS
- UIKit
- dataflow
- Concurrency
- GCD
- authentication
- firebase
- ar
- 달력
- Network
- Animation
- RxSwift
- 데이터최적화
Archives
- Today
- Total
XLOG
[UIKit] Google Login With Firebase 본문
- 우선적으로 프로젝트에 FirebaseAuth 와 GoogleSignIn을 설치해야 한다. (pod or Swift Package Manager) 이용
- custom URL schemes 를 Xcode 프로젝트에 추가한다.
- GoogleService-Info.plist 에 REVERSED_CLIENT_ID 값을 확인(복사)
- Info plist에서 URL Types 에 + 버튼 클릭
- URL Schemes 에서 a에서 복사한 붙여넣기
- AppDelegate 에 application:didFinishLaunchingWithOptions: 메서드에 FirebaseApp.configure() 를 추가해 준다.
- AppDelegate 에 application:openURL:options: 함수를 추가하여 GIDSignIn.sharedInstance.handle(url) 을 반환하도록 해준다
- 여기에서 내가 등록한 url 스키마와 구글 서버와의 통신 연결시키는 것 같다. FirebaseApp ↔ Google
- 그 다음 내가 로그인 화면을 구성할 ViewController 로 돌아와 다음과 같은 코드를 작성한다.
import FirebaseCore
import FirebaseAuth
import GoogleSignIn
//Google SignIn 과 FirebaseApp을 연결하기 위한 내 FirebaseApp ClientID를 가져오는 로직
guard let clientID = FirebaseApp.app()?.options.clientID else { return }
// Create Google Sign In configuration object.
let config = GIDConfiguration(clientID: clientID)
// Start the sign in flow!
GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { [unowned self] user, error in
if let error = error {
// ...
return
}
guard
let authentication = user?.authentication,
let idToken = authentication.idToken
else {
return
}
// 내가 로그인한 구글 아이디로 authentication, idToken을 생성하여 credential을 생성한다.
let credential = GoogleAuthProvider.credential(withIDToken: idToken,
accessToken: authentication.accessToken)
// 생성한 credential을 이용하여 Firebase Auth를 통해 sign In 진행
Auth.auth().signIn(with: credential) { [weak self] result, error in
guard let self = self else { return }
guard
result != nil,
error == nil else {
if let error = error {
print("Error google Login - \(error) ")
}
return
}
print("Successfull Log in")
// Log in 성공시 로그인을 위해 띄운 google 로그인 페이지 내리기
self.navigationController?.popViewController(animated: true)
}
}
social Login을 진행할 경우 유저 생성을 진행하지 않더라도 FirebaseAuth의 createUser 까지 같이 진행을 하게 되는 것 같다.
하지만 개발하려고 하는 특성상 FirebaAuth에서 내가 접근할 수 있는 유저의 정보는 한정적인 것 같다.
아마 개인 정보 처리에 대한 보안적 이슈 때문인 것 같다. Social Login에선 google 에서 제공하는 정보들이 password의 역할을 하기 때문에 필요는 없지만 email. password 의 경우 내가 password 에 접근할 수 없게 만든 이유와 같은걸로 생각이 된다.
프로필 페이지에 기타 항목을 추가하고 싶다면, 로그인 과정에서 발생하는 정보들을 이용하여 다른 Firebase 상품(database, FireStore)에 연동하여 정보를 조회, 추가, 수정 할 수 있는 로직을 함께 사용한다면, 내가 원하는 정보들과 같이 유저의 정보를 컨트롤 할 수 있다.
source : https://doitduri.tistory.com/65
source : Firebase Auth 공식 문서
source : Google development 공식 문서
'Swift > UIKit' 카테고리의 다른 글
[UIKit] Layer 는 무엇일까? 왜 사용할까? (0) | 2023.03.01 |
---|---|
원티드 프리온보딩 챌린지 iOS 2차과정 사전 과제 (2) | 2023.02.26 |
[UIKit] UIImage 효율적으로 사용하기 - 1 (0) | 2023.02.01 |
[UIKit]UIView에 action 추가하기 (0) | 2023.01.30 |
[UIKit] UITextField 한글 글자 수 제한 (0) | 2023.01.30 |