https://firebase.google.com/docs/auth/ios/manage-users?hl=ko#swift_1
Firebase에서 사용자 관리하기 | Firebase Authentication
Google I/O 2023에서 Firebase의 주요 소식을 확인하세요. 자세히 알아보기 의견 보내기 Firebase에서 사용자 관리하기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요
firebase.google.com
공식문서에 따르면 사용자의 정보를 불러오는 방식에는 2가지가 있다.
if Auth.auth().currentUser != nil {
// User is signed in.
// ...
} else {
// No user is signed in.
// ...
}
Auth.auth().addStateDidChangeListener { auth, user in
}
첫번째 방식으로 진행했을 때 왜 오류가 생기는지 알아보자.
작업 중인 스레드에서 Auth.auth().currentUser를 호출했는데 메인 스레드에서 user의 정보를 불러오는 작업까지 해버린다면,
user의 정보를 불러오는 동안 다른 작업을 할 수 없다는 비효율성이 생긴다.
때문에 다른 스레드에 해당 작업을 넘기고 user 정보를 받지 않았는데도 비교를 시작할 가능성이 있다.

하지만 지금과 같은 경우에는 user의 정보를 모두 불러오는 작업이 끝난 후 다음 작업들을 시작해야한다.
때문에 completionHandler를 가진 함수, 즉 아까 정보를 불러오는 두번째 방법을 통해서 작업한다면 오류를 해결할 수 있다.
참고: 인증 객체의 초기화가 완료되지 않아 currentUser가 null일 수도 있습니다. 리스너를 사용해 사용자의 로그인 상태를 추적하면 이런 상황을 처리할 필요가 없습니다.
공식문서에서도 해결 방법을 알려주고 있다.
하지만 첫번째 방법을 고집하는 방법도 있는데,
|
1
2
3
4
5
|
if Auth.auth().currentUser == nil {
DispatchQueue.main.async {
// task
}
}
|
cs |
메인스레드에 비동기적으로 작업을 넘겨줌으로써, 약간의 딜레이를 발생시켜 그 사이에 유저의 정보를 불러오게하는 방법도 있는것같으나..
굳이??
틀린내용 있으면 지적해주세요
'UIKit' 카테고리의 다른 글
| UICollectionViewHeader with Dynamic Height (0) | 2023.09.25 |
|---|---|
| UIImageView를 Image 크기에 맞추기 [Swift] (0) | 2023.08.26 |
| cell의 이벤트 에러 [Swift] (0) | 2023.08.21 |
| addGestureRecognizer와 addTarget 차이 [Swift] (0) | 2023.08.21 |
| UITextView의 intrinsicContentSize (0) | 2023.08.18 |