【问题标题】:Facebook Graph Request is returning name but not emailFacebook Graph Request 正在返回名称但不是电子邮件
【发布时间】:2017-03-04 02:31:03
【问题描述】:

我正在使用图形 API 从 Facebook 登录返回我的姓名和电子邮件。这是我使用的代码 - 名称恢复正常,但电子邮件为零:

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

我不确定我的代码是错误的还是只是一个错误 - 我将电子邮件和姓名都指定为我的参数,但您可以看到只有姓名返回。有人知道为什么会这样吗?

【问题讨论】:

  • 您是否向用户请求了电子邮件权限?

标签: ios swift facebook facebook-graph-api


【解决方案1】:

您的代码绝对正确,facebook graph API 不提供电子邮件的可能性很小:

  1. 注册用户已提交其电子邮件但未通过验证
  2. 用户已将电子邮件(可见性)设置为私人/仅限朋友访问(不公开)

检查一个/您的帐户的帐户设置(电子邮件有效且经过验证并且是公开的)

【讨论】:

  • 你知道,这两个实际上都是真的.. 有问题的用户是我,我很确定我的电子邮件只是朋友而不是公开的(有人的吗?)。并且不记得任何时候验证我的电子邮件也是最近的过去。如果是这样,很高兴知道这不是我的代码,因为这让我发疯了。
【解决方案2】:

我知道你忘记获取电子邮件许可了,所以我在这里分享你获取许可的代码。

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

【讨论】:

    猜你喜欢
    • 2013-08-25
    • 2017-09-29
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    相关资源
    最近更新 更多