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")
}
})
下午好!我需要从 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")
}
})