Kal*_*ney 14 facebook-graph-api facebook-ios-sdk swift
我正在尝试通过facebook sdk获取信息,但到目前为止我只获得用户的ID和名称,虽然我确定有可用的电子邮件,因为这是我的帐户.我一直在寻找几个答案,但到目前为止他们都没有解决我的问题.我做错了什么,为什么在我请求多个权限时它没有返回更多数据?
这是我的代码:
fbLoginManager.logInWithReadPermissions(["public_profile", "email", "user_friends", "user_about_me", "user_birthday"], handler: { (result, error) -> Void in
if ((error) != nil)
{
// Process error
println("There were an error: \(error)")
}
else if result.isCancelled {
// Handle cancellations
fbLoginManager.logOut()
}
else {
var fbloginresult : FBSDKLoginManagerLoginResult = result
if(fbloginresult.grantedPermissions.contains("email"))
{
println(fbloginresult)
self.returnUserData()
}
}
})
Run Code Online (Sandbox Code Playgroud)
以及获取用户数据的功能:
func returnUserData()
{
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil)
{
// Process error
println("Error: \(error)")
}
else
{
println("fetched user: \(result)")
if let userName : NSString = result.valueForKey("name") as? NSString {
println("User Name is: \(userName)")
}
if let userEmail : NSString = result.valueForKey("email") as? NSString {
println("User Email is: \(userEmail)")
}
}
})
}
Run Code Online (Sandbox Code Playgroud)
哪个回报:
fetched user: {
id = 55555555;
name = "Kali Aney";
}
User Name is: Kali Aney
Run Code Online (Sandbox Code Playgroud)
HeT*_*Tzi 38
Facebook Graph API打破了它的向后兼容性(当以默认方式使用时)自Graph-API版本2.4(Pod版本4.4.0).
FB Graph-API 2.4不会返回用户的所有默认字段
要解决此问题,您可以使用显式图形版本2.3:
[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil tokenString:[FBSDKAccessToken currentAccessToken].tokenString version:@"v2.3" HTTPMethod:nil]
在这种情况下,FB保证v2.3将在至少2年后可用. https://developers.facebook.com/docs/graph-api/overview:
Graph API有多个版本可供任何时间访问.每个版本都包含一组核心字段和边缘操作.我们保证这些核心API将在发布后至少2年内在该版本中可用且未经过修改.平台更改日志可以告诉您当前可用的版本.
要么
您可以通过询问您感兴趣的特定字段来使用新的Graph-API(v2.4):
[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields" : @"email,name"}]
几天前我一直在努力解决这个问题,直到找到了@HeTzi的答案,这个答案非常完美.这种请求的快速版本是:
func referenceFBData() {
var request = FBSDKGraphRequest(graphPath:"me", parameters: ["fields":"email,first_name,gender"]);
request.startWithCompletionHandler { (connection : FBSDKGraphRequestConnection!, result : AnyObject!, error : NSError!) -> Void in
if error == nil {
println("The information requested is : \(result)")
} else {
println("Error getting information \(error)");
}
}
}
Run Code Online (Sandbox Code Playgroud)
请记住,您必须首先请求正确的读取权限才能使用此请求获取数据.
小智 5
这工作......希望它有帮助..
NSMutableDictionary* parameters = [NSMutableDictionary dictionary];
[parameters setValue:@"id, name, email" forKey:@"fields"];
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
{
NSLog(@"Fetched user is:%@", result);
}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12718 次 |
| 最近记录: |