在Firebase 2.5.1
中,我曾经这样做过,而且它运行良好:
@IBAction func facebookLoginDidTouch(sender: AnyObject) {
let facebookLogin = FBSDKLoginManager()
facebookLogin.logInWithReadPermissions(["public_profile", "email"], fromViewController: self, handler: {
(facebookResult, facebookError) -> Void in
if facebookError != nil {
print("Facebook login failed. Error \(facebookError)")
} else if facebookResult.isCancelled {
print("Facebook login was cancelled.")
} else {
let accessToken = FBSDKAccessToken.currentAccessToken().tokenString
myRootRef.authWithOAuthProvider("facebook", token: accessToken, withCompletionBlock: { error, authData in
if error != nil {
print("Login failed. \(error)")
} else {
print("Logged in!")
let newUser = [
"provider": user.provider,
"imageUrl": user!.providerData["profileImageURL"] as String, // etc
]
}
})
}
})
}
现在我正尝试在 Firebase 3.x
中实现这一点。但是,我对应该在哪里放置权限和东西感到困惑
这是我目前尝试过的
@IBAction func facebookLoginDidTouch(sender: AnyObject) {
let facebookLogin = FBSDKLoginManager()
let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString)
FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in
if error != nil {
print("Login failed. \(error)")
} else {
print("Logged in!")
let newUser = [
"provider": user.provider,
"imageUrl": user!.providerData["profileImageURL"] as String
]
}
})
}
更新:
facebookLogin.logInWithReadPermissions(["public_profile", "email"], fromViewController: self, handler: {
(facebookResult, facebookError) -> Void in
if facebookError != nil {
print("Facebook login failed. Error \(facebookError)")
} else if facebookResult.isCancelled {
print("Facebook login was cancelled.")
} else {
// your firebase authentication stuff..
let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString)
FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in
if error != nil {
print("Login failed. \(error)")
} else {
print("Logged in!")
let userID = Helpers.extractUID(user!)
let rootRef = FIRDatabase.database().reference()
let userRef = rootRef.child("users").child(userID)
userRef.observeEventType(.Value, withBlock: { snapshot in
if snapshot.value is NSNull {
let newUser = [
"providerId": user?.providerID,
"displayName": user?.displayName,
]
userRef.setValue((newUser as! AnyObject))
// perform segue
}
})
}
})
最佳答案
在你成功登录 facebook 并取回用户数据后......你必须添加 firebase 身份验证之类的东西
@IBAction func facebookLoginDidTouch(sender: AnyObject) {
let facebookLogin = FBSDKLoginManager()
facebookLogin.logInWithReadPermissions(["public_profile", "email"], fromViewController: self, handler: {
(facebookResult, facebookError) -> Void in
if facebookError != nil {
print("Facebook login failed. Error \(facebookError)")
} else if facebookResult.isCancelled {
print("Facebook login was cancelled.")
} else {
// your firebase authentication stuff..
let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString)
FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in
if error != nil {
print("Login failed. \(error)")
} else {
print("Logged in!")
}
})
}
})
}
关于ios - Firebase 3.x - Facebook 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36451070/