Вы можете получить информацию о профиле пользователя, например, так:
let user = Auth.auth().currentUser
if let user = user {
let uid = user.uid
let email = user.email
let photoURL = user.photoURL
let displayName = user.displayName
}
Если вы хотите сохранить дополнительную информацию о профиле c, указанную в приложении (например, его любимый цвет или что-либо еще, заданное c) для вашего приложения), я бы рекомендовал хранить это в коллекции в Firestore, которая не с именем users
, чтобы избежать путаницы. Назовите его, например, profiles
.
Затем создайте класс ProfileRepository
, который выбирает профиль пользователя следующим образом:
import FirebaseFirestoreSwift
struct UserProfile: Codable {
var favouriteColour: String
}
class ProfileRepository {
func getUserProfile(completion: @escaping (_ profile: UserProfile) -> Void) {
if let uid = Auth.auth().currentUser?.uid {
let profileRef = Firestore.firestore().collection("profiles").document(uid)
profileRef.getDocument { (documentSnapshot, error) in
do {
if let profile = try documentSnapshot?.data(as: UserProfile.self) {
completion(profile)
}
}
catch {
print(error)
}
}
}
}
}
Имейте в виду, что, поскольку большинство API-интерфейсов Firebase асинхронный, вам нужно будет использовать механизм обратного вызова, чтобы вернуть профиль вызывающей стороне. Здесь я использовал замыкание (которое мне лично нравится намного больше, чем делегатам).
Я также использую поддержку Firebase для Codable, поэтому вам придется добавить эту строку в свой Podfile
:
pod 'FirebaseFirestoreSwift'