Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Facebook图形请求正在返回名称,但未返回电子邮件_Ios_Swift_Facebook_Facebook Graph Api - Fatal编程技术网

Ios Facebook图形请求正在返回名称,但未返回电子邮件

Ios Facebook图形请求正在返回名称,但未返回电子邮件,ios,swift,facebook,facebook-graph-api,Ios,Swift,Facebook,Facebook Graph Api,我正在使用graph api从Facebook登录返回我的姓名和电子邮件。这是我使用的代码-名称返回正常,但电子邮件为零: func getUserInfo() { let params = ["fields" : "email, name"] let graphRequest = GraphRequest(graphPath: "me", parameters: params) graphRequest.start { (urlResponse, req

我正在使用graph 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

我不确定我的代码是错误的还是只是一个bug——我指定email和name作为参数,但是你可以看到只有name返回。有人知道为什么会发生这种情况吗?

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

  • 注册用户已提交其电子邮件,但未经验证
  • 用户已将电子邮件(可见性)设置为仅对朋友进行私人/有限访问(非公开)

  • 检查/您的帐户的帐户设置(电子邮件是有效和有效的,并且是公开的)

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

  • 注册用户已提交其电子邮件,但未经验证
  • 用户已将电子邮件(可见性)设置为仅对朋友进行私人/有限访问(非公开)

  • 检查/您的帐户的帐户设置(电子邮件是有效的和已验证的,并且是公共的)

    我发现您忘了获取电子邮件权限,所以我在这里与您共享获取权限的代码

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

    我想你忘了接受电子邮件许可,所以我在这里分享你的代码来获得许可

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

    你知道,这两个事实都是真的。。有问题的用户是我,我很确定我的电子邮件只是朋友的,不是公开的(是谁的?)。我也不记得我的电子邮件是最近的事了。如果这是真的,很高兴知道这不是我的代码,因为这让我发疯。你知道,这两个事实都是真的。。有问题的用户是我,我很确定我的电子邮件只是朋友的,不是公开的(是谁的?)。我也不记得我的电子邮件是最近的事了。如果是这样的话,很高兴知道这不是我的代码,因为这让我发疯。你向用户请求电子邮件权限了吗?你向用户请求电子邮件权限了吗?