长话短说:如何获取使用 facebook SDK 4.4 登录我的应用的用户的电子邮件和姓名
到目前为止,我已经成功登录,现在我可以从应用程序中的任何位置获取当前访问 token 。
我如何配置我的登录 View Controller 和 facebook 登录按钮:
class LoginViewController: UIViewController, FBSDKLoginButtonDelegate {
@IBOutlet weak var loginButton: FBSDKLoginButton!
override func viewDidLoad() {
super.viewDidLoad()
if(FBSDKAccessToken.currentAccessToken() == nil)
{
print("not logged in")
}
else{
print("logged in already")
}
loginButton.readPermissions = ["public_profile","email"]
loginButton.delegate = self
}
//MARK -FB login
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
//logged in
if(error == nil)
{
print("login complete")
print(result.grantedPermissions)
}
else{
print(error.localizedDescription)
}
}
func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
//logout
print("logout")
}
现在在我的主视图上,我可以像这样获取访问 token :
let accessToken = FBSDKAccessToken.currentAccessToken()
if(accessToken != nil) //should be != nil
{
print(accessToken.tokenString)
}
我如何从登录的用户那里获取姓名和电子邮件,我看到许多问题和答案都使用较旧的 SDK 或使用 Objective-C。
最佳答案
我在 android 中使用过 fields
,所以我想在 iOS 中也尝试一下,而且它有效。
let req = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"email,name"], tokenString: accessToken.tokenString, version: nil, HTTPMethod: "GET")
req.startWithCompletionHandler({ (connection, result, error : NSError!) -> Void in
if(error == nil) {
print("result \(result)")
} else {
print("error \(error)")
}
}
)
结果将打印:
result {
email = "email@example.com";
id = 123456789;
name = "Your Name";
}
发现这些字段等于User
端点,查看this link,里面可以看到所有可以获取到的字段。
Swift 4 及更高版本的更新
let r = FBSDKGraphRequest(graphPath: "me",
parameters: ["fields": "email,name"],
tokenString: FBSDKAccessToken.current()?.tokenString,
version: nil,
httpMethod: "GET")
r?.start(completionHandler: { test, result, error in
if error == nil {
print(result)
}
})
使用 FBSDKLoginKit 6.5.0 更新 Swift 5
guard let accessToken = FBSDKLoginKit.AccessToken.current else { return }
let graphRequest = FBSDKLoginKit.GraphRequest(graphPath: "me",
parameters: ["fields": "email, name"],
tokenString: accessToken.tokenString,
version: nil,
httpMethod: .get)
graphRequest.start { (connection, result, error) -> Void in
if error == nil {
print("result \(result)")
}
else {
print("error \(error)")
}
}
关于ios - 获取电子邮件并命名 Facebook SDK v4.4.0 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31314124/