获取电子邮件并命名Facebook SDK v4.4.0 Swift

Cul*_*tes 40 facebook-sdk-4.0 swift

TL; TR:如何使用facebook SDK 4.4获取在我的应用程序上登录的用户的电子邮件和名称

到目前为止,我已经设法登录工作,现在我可以从应用程序的任何位置获取当前访问令牌.

我如何配置登录视图控制器和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")
    }
Run Code Online (Sandbox Code Playgroud)

现在在我的主视图中,我可以获得访问令牌,如下所示:

   let accessToken = FBSDKAccessToken.currentAccessToken()
    if(accessToken != nil) //should be != nil
    {
        print(accessToken.tokenString)
    }
Run Code Online (Sandbox Code Playgroud)

如何从登录的用户处获取姓名和电子邮件,我使用较旧的SDK或使用Objective-C查看了许多问题和答案.

Cul*_*tes 58

我已经fields在android中使用了,所以我想在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)")
       }
   }
)
Run Code Online (Sandbox Code Playgroud)

结果将打印:

result {
   email = "email@example.com";
   id = 123456789;
   name = "Your Name";
}
Run Code Online (Sandbox Code Playgroud)

发现这些字段与User端点相同,请参阅此链接,您可以在其中查看可以获得的所有字段.

  • 在过去的3个小时里,我正在撕开我的头发来收发邮件.他们确实需要通过这些重大变化来更新他们的文档.感谢上帝我找到了这个. (3认同)
  • @MasonBallowe 作为 NSDictionary 访问它,例如。`让 r = 结果为!NSDictionary`,使用例如抓取值。`r["first_name"]` (3认同)

Cha*_*Raj 27

let request = GraphRequest.init(graphPath: "me", parameters: ["fields":"first_name,last_name,email, picture.type(large)"], accessToken: AccessToken.current, httpMethod: .GET, apiVersion: FacebookCore.GraphAPIVersion.defaultVersion)

request.start({ (response, requestResult) in
      switch requestResult{
          case .success(let response):
             print(response.dictionaryValue)
          case .failed(let error):
             print(error.localizedDescription)
      }
})
Run Code Online (Sandbox Code Playgroud)


JT5*_*501 18

对于Swift 3和Facebook SDK 4.16.0:

func getFBUserInfo() {
    let request = GraphRequest(graphPath: "me", parameters: ["fields":"email,name"], accessToken: AccessToken.current, httpMethod: .GET, apiVersion: FacebookCore.GraphAPIVersion.defaultVersion)
    request.start { (response, result) in
        switch result {
        case .success(let value):
            print(value.dictionaryValue)
        case .failed(let error):
            print(error)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并将打印:

Optional(["id": 1xxxxxxxxxxxxx, "name": Me, "email": stackoverflow@gmail.com])
Run Code Online (Sandbox Code Playgroud)


Kre*_*kin 8

斯威夫特 5

将使用该类检索用户电子邮件名字姓氏和他们的idGraphRequest

// Facebook graph request to retrieve the user email & name
let token = AccessToken.current?.tokenString
let params = ["fields": "first_name, last_name, email"]
let graphRequest = GraphRequest(graphPath: "me", parameters: params, tokenString: token, version: nil, httpMethod: .get)
graphRequest.start { (connection, result, error) in

    if let err = error {
        print("Facebook graph request error: \(err)")
    } else {
        print("Facebook graph request successful!")

        guard let json = result as? NSDictionary else { return }
        if let email = json["email"] as? String {
            print("\(email)")
        }
        if let firstName = json["first_name"] as? String {
            print("\(firstName)")
        }
        if let lastName = json["last_name"] as? String {
            print("\(lastName)")
        }
        if let id = json["id"] as? String {
            print("\(id)")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Sre*_* VR 6

通过Facebook登录后,请调用以下功能。

   func getUserDetails(){

    if(FBSDKAccessToken.current() != nil){

        FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id,name , first_name, last_name , email"]).start(completionHandler: { (connection, result, error) in

            guard let Info = result as? [String: Any] else { return }

             if let userName = Info["name"] as? String
                {
                   print(userName)
                }

        })
    }
}
Run Code Online (Sandbox Code Playgroud)


Raj*_*shi 5

Facebook的IOS SDK获取用户名和电子邮件迅速3

FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, email"]).start(completionHandler: { (connection, result, error) -> Void in
        if (error == nil) {
            let fbDetails = result as! NSDictionary
            print(fbDetails)
        } else {
            print(error?.localizedDescription ?? "Not found")
        }
    })
Run Code Online (Sandbox Code Playgroud)