我编写了一个应用程序,通过使用 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
我基本上只想要一个条件,如果用户以前登录过应用程序,则返回真/假,如果这是新用户,则返回相反的情况。
我的视图控制器
这是我的登录视图控制器,这是我的应用程序中可见的第一个视图。现在它只设置打印“新用户”,如果用户从未登录过应用程序,如果这是一个返回用户,则打印“老用户”。
@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 而不是谷歌。
有了这个答案,嵌套的 if 语句if UserDefaults.standard.string(forKey: "uid") != nil && Auth.auth().currentUser != nil {总是返回 false。第一个条件是始终返回为假的条件,而第二个条件是始终返回为真的条件。(这发生在我多次登录的帐户和全新的帐户上)。当dump(UserDefaults.standard)我收到
- <NSUserDefaults: 0x2825dd140> #0
- super: NSObject
包括检查上次登录日期和创建日期的解决方案(newUserRref?.creationDate?.timeIntervalSince1970 == newUserRref?.lastSignInDate?.timeIntervalSince1970)总是为我返回 false,因此它返回没有用户曾经是新用户。那篇文章还有其他一些我不完全理解的解决方案
该文档并没有真正解释如何检查这是否是第一次登录,我只能看到它说如何创建新用户或登录现有用户,但我不知道我怎么知道什么时候做什么。