2017-03-04 54 views
0

我正在使用图表api从Facebook登录中返回我的姓名和电子邮件。这是我使用的代码 - 名回来很好,但电子邮件是零:Facebook Graph请求正在返回姓名,但不是电子邮件

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 

我不知道如果我的代码错误或这只是一个错误 - 我将电子邮件和名称都指定为我的参数,但正如您所看到的,只有名称会返回。任何人都知道这是为什么发生?

+0

您是否要求用户发送电子邮件许可? – WizKid

回答

1

你的代码是完全正确的,有几种可能性,Facebook的图形API没有提供电子邮件:

  1. 注册用户已经提交了电子邮件,但不进行验证
  2. 用户设置电子邮件(知名度)的私人/有限访问朋友只(不公开)的/你的帐户的

检查帐户设置(电子邮件有效&验证,以及它是公共的)

+0

你知道,这两个实际上是真的..有问题的用户是我,我很确定我的电子邮件是朋友而不是公开(是任何人的?)。任何时候都不记得验证我的电子邮件是否是最近的过去。如果这就是它的原因,很高兴知道这不是我的代码,因为这让我疯狂。 – KingTim

1

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

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) 
    } 
相关问题