Facebook图表请求正在返回名称,但不是电子邮件

我正在使用图表API从Facebooklogin返回我的名字和电子邮件。 这是我使用的代码 – 名称恢复正常,但电子邮件是零:

func getUserInfo() { let params = ["fields" : "email, name"] let graphRequest = GraphRequest(graphPath: "me", parameters: params) graphRequest.start { (urlResponse, requestResult) in switch requestResult { case .failed(let error): print("error in graph request:", error) break case .success(let graphResponse): if let responseDictionary = graphResponse.dictionaryValue { print(responseDictionary) if let name = responseDictionary["name"] { self.nameLabel.text = "Logged in as: \n\(name)" } if let email = responseDictionary["email"] { self.emailLabel.text = "Your email is: \n\(email)" } else { self.emailLabel.text = "Your email is: " } print(responseDictionary["name"]) print(responseDictionary["email"]) } } } } 

这是打印到我的控制台:

 ["id": 1653899307960705, "name": *my name removed for privacy*] Optional(*my name removed for privacy*) nil 

我不知道我的代码是错误的还是只是一个错误 – 我指定电子邮件和名称作为我的参数,但正如你所看到的只有名字回来。 任何人都知道这是为什么发生?

您的代码是绝对正确的,那么facebookgraphicsAPI不提供电子邮件的可能性很小:

  1. 注册用户已经提交了电子邮件,但未经过validation
  2. 用户将电子邮件(可见性)设置为私人/限制访问仅限于朋友(不公开)

检查/您的帐户的帐户设置(电子邮件是有效的和validation的,以及它是公开的)

我忘了带电子邮件许可,所以在这里我分享你的代码,以获得许可。

 func fbLoginInitiate() { let loginManager = FBSDKLoginManager() loginManager.logInWithReadPermissions(["public_profile", "email","user_friends"], handler: {(result:FBSDKLoginManagerLoginResult!, error:NSError!) -> Void in if (error != nil) { // Process error self.removeFbData() } else if result.isCancelled { // User Cancellation self.removeFbData() } else { //Success if result.grantedPermissions.contains("email") && result.grantedPermissions.contains("public_profile") && result.grantedPermissions.contains("user_friends"){ //Here you need to call your function for graphRequest self.getUserInfo() } else { //Handle error } } }) } func removeFbData() { //Remove FB Data let fbManager = FBSDKLoginManager() fbManager.logOut() FBSDKAccessToken.setCurrentAccessToken(nil) }