使用Swift和Parse获取Facebook用户详细信息

5
我需要在通过Parse登录新用户时获取Facebook用户的详细信息。目前,我正在以下方式登录新用户,但无法获取用户详细信息。我看过一些使用Objective-C编写的代码,但其中大多数功能已经不再适用。我正在运行版本为4.3.0的Facebook iOS SDK。
@IBAction func facebookButton(sender: AnyObject) {

    PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) {
        (user: PFUser?, error: NSError?) -> Void in
        if let user = user {
            if user.isNew {
                println("User signed up and logged in through Facebook!")
            } else {
                println("User logged in through Facebook!")
            }
        } else {
            println("Uh oh. The user cancelled the Facebook login.")
        }
    }
}
2个回答

10

在登录请求后,您需要发送一份 FBSDKGraphRequest 来获取用户详细信息。

这可以在 if let user = user {...} 代码块内完成。

    // Create request for user's Facebook data
    let request = FBSDKGraphRequest(graphPath:"me", parameters:nil)

    // Send request to Facebook
    request.startWithCompletionHandler {

        (connection, result, error) in

        if error != nil {
            // Some error checking here
        }
        else if let userData = result as? [String:AnyObject] {

            // Access user data
            let username = userData["name"] as? String

            // ....
        }
    }               

嗨,我正在尝试使用 let username = userData["name"] as? String 获取用户电子邮件,但它显示为空。我已经成功获取了用户名。 - Vakas
1
我已经修复了。你需要有参数:["fields":"id,email,name,first_name,last_name"] - Vakas
如何在请求之外访问它?比如我想在其他地方使用用户名,该怎么做? - Gustavo Fulton
@GustavoFulton:你可以将用户名分配给类变量,或者在startWithCompletionHandler回调块内调用类方法。 - freytag

1

对于新的Facebook API和Swift 3.1版本,您可以像这样操作:

if((FBSDKAccessToken.current()) != nil) {
    FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id,name,first_name,last_name,email"]).start(completionHandler: {(connection, result, error) -> Void in

        if(error != nil) {
            print("Some error occurred.");
        } else {
            print(result!)
        }
    })
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接