Facebook登录屏幕显示两次,第一次是常规登录页面,但第二次显示“您已经授权我的应用名称”。谁能告诉我在我的代码中我做错了什么。
这是我的登录代码:
static func createAndLogin(_ viewController: UIViewController, completion: @escaping (_ success: Bool) -> Void) {
let loginManager = FBSDKLoginManager()
loginManager.logOut()
loginManager.logIn(withReadPermissions: ["public_profile", "email", "user_friends"], from: viewController) { (result, error) -> Void in
if error != nil {
print("login FAILED \(error)")
completion(false)
} else if (result?.isCancelled)!{
print("login is CANCELLED")
completion(false)
} else if FBSDKAccessToken.current() != nil {
let accessToken = FBSDKAccessToken.current().tokenString
let credential = FIRFacebookAuthProvider.credential(withAccessToken: accessToken!)
FIRAuth.auth()?.signIn(with: credential, completion: { (user, error) in
if error != nil {
print("SIGN IN WITH FIREBASE FAILED")
completion(false)
} else {
print("YAY LOGIN SUCCESSFULL!!!!")
if let mainUser = FIRAuth.auth()?.currentUser?.providerData{
for profile in mainUser {
let providerID = profile.providerID
let uid = profile.uid // provider-specific UID
let name = profile.displayName
let email = profile.email
let photoUrl = profile.photoURL
if (FBSDKAccessToken.current() != nil) {
let facebookRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, gender, first_name, last_name, middle_name, picture"])
facebookRequest?.start(completionHandler: { (connection, result, error) in
if error == nil {
print(result as Any)
let data = result as! NSDictionary
let gender = data.object(forKey: "gender") as! String
var newUser = User(firstName: name!, profileImageURL: ("\(photoUrl!)"), gender: gender)
newUser.save()
self.currentUserID = uid
}
})
}
completion(true)
}
}
}
})
}
}
}
答案 0 :(得分:0)
使用默认登录行为预期的结果。您可能想尝试设置loginManager.loginBehavior = .systemAccount
以获得更流畅的登录体验。这将尝试使用您在设置中提供苹果的FB凭据登录,这根本不需要切换应用程序。如果用户未在设置中登录FB,那么它将退回到其他更具侵入性的方法之一(webivew或FB应用程序)。