У меня есть приложение, в котором пользователь может войти через Facebook.
Все работает нормально, но у меня проблема, когда пользователь отменяет процесс входа в систему. Есть два разных сценария ios, с которыми мне хотелось бы справиться, но я понятия не имею, как:
1.
2.
Я не мог Я не могу найти здесь ничего такого, поэтому я надеюсь, что кто-то может мне помочь.
Это мой handleFBLogin
-метод, который вызывается, когда пользователь нажимает на button
:
//MARK: Facebook Login
@objc func handleFBLogin(){
// disable button tap
self.facebookButton.isEnabled = false
// hide the buttons title
self.facebookButton.setTitle("", for: .normal)
// start loading animation
setupLoadingAnimation()
logoAnimation.play()
let accessToken = AccessToken.current
LoginManager().logIn(permissions: ["email", "public_profile"], from: self) { (result, error) in
if error != nil {
// stop loading animation
self.logoAnimation.stop()
// remove animation from view
self.logoAnimation.removeFromSuperview()
// reset button title to "Registrieren"
self.facebookButton.setTitle("Mit Facebook fortfahren", for: .normal)
// play shake animation
self.facebookButton.shake()
// enable button tap
self.facebookButton.isEnabled = true
// some FB error
Utilities.showErrorPopUp(labelContent: "Fehler beim Facebook-Login", description: error!.localizedDescription)
return
}
// successfull FB-Login
GraphRequest(graphPath: "/me", parameters: ["fields": "id, email, name"]).start { (connection, result, error) in
if error != nil {
// stop loading animation
self.logoAnimation.stop()
// remove animation from view
self.logoAnimation.removeFromSuperview()
// reset button title to "Registrieren"
self.facebookButton.setTitle("Mit Facebook fortfahren", for: .normal)
// play shake animation
self.facebookButton.shake()
// enable button tap
self.facebookButton.isEnabled = true
// some FB error
Utilities.showErrorPopUp(labelContent: "Fehler beim Facebook-Login", description: error!.localizedDescription)
}else {
print(result!)
// check if user has account
guard let Info = result as? [String: Any] else { return }
let email = Info["email"] as? String
Auth.auth().fetchSignInMethods(forEmail: email!) { (methods, error) in
if error != nil {
// stop loading animation
self.logoAnimation.stop()
// remove animation from view
self.logoAnimation.removeFromSuperview()
// reset button title to "Registrieren"
self.facebookButton.setTitle("Mit Facebook fortfahren", for: .normal)
// play shake animation
self.facebookButton.shake()
// enable button tap
self.facebookButton.isEnabled = true
// show error popUp
Utilities.showErrorPopUp(labelContent: "Fehler", description: error!.localizedDescription)
} else {
// no error -> check email adress
// Email ist noch nicht registriert -> sign up
if methods == nil {
let usernameVC = self.storyboard?.instantiateViewController(withIdentifier: "UsernameVC") as! UserNameVC
usernameVC.accessToken = accessToken
self.navigationController?.pushViewController(usernameVC, animated: true)
}
// Email ist registriert -> login
else {
// set user status to logged-in
UserDefaults.standard.setIsLoggedIn(value: true)
UserDefaults.standard.synchronize()
// stop animation
self.logoAnimation.stop()
// transition to Home-ViewController
self.transitionToHome()
}
}
}
}
}
}
}