iOS 如何从 Facebook SDK 获取用户数据

how to get user data from Facebook SDK on iOS

下午好!我需要从 Facebook 获取用户数据。我成功获取了用户名、id、照片等数据。但是,当您尝试查询诸如婚姻状况之类的内容时,我得到的响应是空字典。我试图提出不同的要求,但总是得到这样的结果。我也阅读了这些主题 official Facebook site, this, 我该如何解决这个问题?

我的示例代码

   static func getUserRelationship() {
    if (FBSDKAccessToken.currentAccessToken() != nil) {
        guard let currentUser = getCurrentFacebookUser() else { return }
        FBSDKGraphRequest(graphPath: "/\(currentUser.id)/family", parameters: nil, HTTPMethod: "GET").startWithCompletionHandler({ (requestConnection, result, error) in
            if error == nil {
                let dictionary = result as! [String : AnyObject]
                let array = dictionary["data"]
                print("facebook", result, dictionary, array?.count)
            } else {
                print(error.localizedDescription)
            }
        })
    } else {
        getDataLogin({
            getUserBirthday()
            }, fails: { (error) in

        })
    }
}

我在控制台看到了结果

    facebook {
    data =     (
    );
}

您的 GraphRequest 不正确。如果你想获取用户数据,graphPathe 应该是 "me" 并且你应该请求参数以获得关系状态和其他信息。而且您还需要在 LogInWithReadPermissons 中请求 public 配置文件,因此在读取权限中:-

    let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
    fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web
    fbLoginManager.logInWithReadPermissions(["public_profile","email"], fromViewController: self) { (result, error) -> Void in
        if error != nil {
            print(error.localizedDescription)
            self.dismissViewControllerAnimated(true, completion: nil)
        } else if result.isCancelled {
            print("Cancelled")
            self.dismissViewControllerAnimated(true, completion: nil)
        } else {

        }
    }

并且在检索信息时:-

   FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, relationship_status"]).startWithCompletionHandler({ (connection, result, error) -> Void in
            if (error == nil){
                let fbDetails = result as! NSDictionary
                print(fbDetails)
            }
        })

顺便说一句,如果您想要婚姻状况,您应该使用 graphPath 作为 "me" 而不是“/{user-id}/family”。您可以使用它来获取此人的家庭关系。

获取 facebook 用户信息更新 swift 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")
        }
    })