RageCompex RageCompex - 7 months ago 44
Swift Question

Get email and name Facebook SDK v4.4.0 Swift

TL;TR: How do I get the email and name of a user that is logged in on my app using the facebook SDK 4.4

So far I have managed to get login working, now I can get the current access token from anywhere in the app.

How I have my login view controller and facebook login button configured:

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")
}


Now on my main view I can get the access token like so:

let accessToken = FBSDKAccessToken.currentAccessToken()
if(accessToken != nil) //should be != nil
{
print(accessToken.tokenString)
}


How do I get the name and email from the user that is logged in, I see many question and answers using eather an older SDK or using Objective-C.

Answer

I've used fields in android, so I figured to try it in IOS as well, and it works.

     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 will print:

result{
    email = "email@example.com";
    id = 123456789;
    name = "Your Name";
}

Found that these fields are equal to the User endpoint, see this link where you can see all the fields that you can get.