Я написал приложение, которое регистрирует пользователя, используя пакет входа в Google и Firebase.Я хотел бы написать некоторые функции, которые были бы
if the user has signed into the app using google previously
then take them straight to the main ViewController
otherwise they must be signing in for the first time
then bring to a view controller to create a profile
Я просто хочу условие, которое возвращает истину / ложь, если пользователь ранее вошел в приложение, и возвращает противоположное, если это новый пользователь.
My View Controller
Это мой контроллер представления входа, который является первым видом, видимым в моем приложении.Прямо сейчас Он настроен на печать «нового пользователя», если пользователь никогда не входил в приложение, и «старого пользователя», если это возвращающийся пользователь.
@objc(SignInViewController)
class SignInViewController: UIViewController, GIDSignInUIDelegate{
@IBOutlet var signInButton: GIDSignInButton!
var handle: AuthStateDidChangeListenerHandle?
override func viewDidLoad() {
super.viewDidLoad()
GIDSignIn.sharedInstance().uiDelegate = self
handle = Auth.auth().addStateDidChangeListener() { (auth, user) in
if user != nil {
MeasurementHelper.sendLoginEvent()
dump(UserDefaults.standard)
//This is the part which I need help with/////////////////////
if this user has logged in previously
print("old user")
self.performSegue(withIdentifier: Constants.Segues.SignInToFp, sender: nil)
}else{
print("new user")
self.performSegue(withIdentifier: Constants.Segues.SignInToFp, sender: nil)
}
////////////////////////////////////////////////////////////
}
}
}
deinit {
if let handle = handle {
Auth.auth().removeStateDidChangeListener(handle)
}
}
Другие решения, которые мне не помогли
Это решение выглядит многообещающе, но объясняет только, как это сделать с Facebook, а не с Google.
С этот ответ вложенный if statment if UserDefaults.standard.string(forKey: "uid") != nil && Auth.auth().currentUser != nil {
всегда возвращает false.Первое условие всегда возвращает false, но второе условие всегда возвращает true.(Это происходит с учетными записями, в которые я захожу несколько раз, и с новыми учетными записями).Когда я dump(UserDefaults.standard)
получаю
- <NSUserDefaults: 0x2825dd140> #0
- super: NSObject
Решение, которое включает проверку последней даты входа в систему с датой создания (newUserRref? .CreationDate? .TimeIntervalSince1970 == newUserRref? .LastSignInDate?.timeIntervalSince1970) всегда возвращал false для меня, поэтому возвращалось, что ни один пользователь никогда не был новым пользователем.В этом посте есть некоторые другие решения, которые я не совсем понимаю
Документация не объясняет, как проверить, является ли это первым входом в систему, я вижу только то, чтокак создать нового пользователя или войти в систему существующего пользователя, но я не знаю, как узнать, когда и что делать.