Я использую объект среды CurrentSession для хранения информации о пользователе. Пользователь может войти в приложение через Google или Facebook. Я хочу, чтобы пользователь вошел в систему даже после закрытия и повторного открытия приложения. Поэтому я собирался проверить c объектов / переменных, указанных поставщиком, для выполнения этих проверок. Хорошо работает для FB, но, к сожалению, не работает для Google (!)
Поэтому я вхожу в систему через Facebook или Google и закрываю приложение ..
Когда я запустить мое приложение снова инициализируется CurrentSession. Я проверяю, был ли пользователь уже авторизован, и это хорошо работает для Facebook, выполнив проверку AccessToken.current! = Nil .
Но как только я делаю то же самое для пользователя, вошедшего в систему через Google, когда я перезапускаю приложение GIDSignIn.sharedInstance () ?. currentUser всегда равен нулю; (
Как мне выполнить эту проверку для пользователя Google? Я знаю, что могу использовать Auth.auth (), но в данный момент я ищу способ сделать это с помощью объекта GIDSignIn ..
import Combine
import FirebaseCore
import FirebaseAuth
import GoogleSignIn
import FBSDKLoginKit
import FBSDKCoreKit
class CurrentSession: ObservableObject {
@Published var userId: String? = nil
init() {
// check if user logged via Facebook
if AccessToken.current != nil { <-- WORKS WELL FOR FACEBOOK
let credential = FacebookAuthProvider.credential(withAccessToken: AccessToken.current!.tokenString)
Auth.auth().signIn(with: credential) { (res,er) in
if er != nil{
print((er?.localizedDescription)!)
return
}
print("email: \(String(describing: res?.user.email))")
print("name: \(String(describing: res?.user.displayName))")
DispatchQueue.main.async {
self.userId = String(describing: res?.user.displayName)
}
}
}
// check if user logged via Google
if let user = GIDSignIn.sharedInstance()?.currentUser, let authentication = user.authentication { <<-- HERE (CHECK DOESN'T WORK AS I EXPECT)
let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken,
accessToken: authentication.accessToken)
Auth.auth().signIn(with: credential) { (res, err) in
if err != nil {
print("\(String(describing: err?.localizedDescription))")
return
}
print("email: \(String(describing: res?.user.email))")
print("name: \(String(describing: res?.user.displayName))")
DispatchQueue.main.async {
self.userId = String(describing: res?.user.displayName)
}
}
} else {
print("No current user found")
}
}
}