我在我的应用程序中使用了Facebook登录,但是我一直在困扰如何让新用户通过注册屏幕进行平衡,并且已注册的用户应该直接进入应用程序。以下是处理Facebook登录的函数(当按钮被点击并且Facebook授权时):
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
if error != nil {
return
}
FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "name"]).start { (connection, result, err) in
let accessToken = FBSDKAccessToken.current()
guard let accessTokenString = accessToken?.tokenString else {return}
let credentials = FIRFacebookAuthProvider.credential(withAccessToken: accessTokenString)
FIRAuth.auth()?.signIn(with: credentials, completion: { (user, error) in
if error != nil {
return
}
if(FBSDKAccessToken.current() != nil){
// logged in
self.performSegue(withIdentifier: "loginToRooms", sender: nil)
}else{
// not logged in
self.performSegue(withIdentifier: "showSetupScreen", sender: nil)
}
})
if err != nil {
return
}
}
}
在上面的
FIRAuth.auth
块中,我基本上想说,在Facebook登录按钮被点击并通过Facebook授权后,如果用户有访问令牌,就直接进入应用程序。否则,前往注册屏幕,用户将在那里输入必要的信息。我还在
viewDidLoad
中设置了这个功能,因此当应用程序启动时,如果用户之前已经登录,他们甚至不会看到登录屏幕,而是直接进入应用程序。 // When app is launched, bring user straight in if they're already authorized. Otherwise show the login screen.
FIRAuth.auth()?.addStateDidChangeListener { auth, user in
if let user = user {
// User is signed in. Show home screen
self.performSegue(withIdentifier: "loginToRooms", sender: nil)
} else {
// No User is signed in. Show user the login screen
return
}
}
然而在测试期间我发现,如果我点击Facebook登录并以新用户的身份输入Facebook凭据,我会被授权并直接进入应用程序,而不需要经过注册屏幕。这会引起各种问题。
对于那些使用Firebase的Facebook登录的人,有什么好的方法来处理这种情况?我需要涵盖以下几种情况:
- 如果一个新用户点击Facebook登录按钮,他们将被带到注册屏幕。
- 如果已注册(但已注销)的用户点击Facebook登录按钮,他们将直接进入应用程序。
- 如果已注册并且仍然登录的用户启动应用程序,他们将跳过登录屏幕,直接进入应用程序。
感谢任何帮助!