如何在iOS中使用Facebook SDK检索朋友的生日?

我已经在我的.h文件中实现了FBFriendPickerDelegate ,并使用下面的FBFriendPickerDelegate来检索信息:

 -(BOOL)friendPickerController:(FBFriendPickerViewController *)friendPicker shouldIncludeUser:(id <FBGraphUser>)user { NSLog(@"Birthday:%@",user.birthday); return YES; } 

但每次在NSLog我得到一个空值…以下是结果。 我在NSLog中获得:

 Birthday:(null) 2012-09-28 10:20:22.450 MyFacebookApp[455:207] Birthday:(null) 2012-09-28 10:20:22.451 MyFacebookApp[455:207] Birthday:(null) 2012-09-28 10:20:22.452 MyFacebookApp[455:207] Birthday:(null) 2012-09-28 10:20:22.454 MyFacebookApp[455:207] Birthday:(null) 

请告诉我是否做错了什么。

你有没有先要求正确的权限 ?

你需要user_birthdayfriends_birthday来访问用户的resp。 他们的朋友的生日,以及user_location / friends_location来获取他们的当前位置。

虽然目前的用户可能会给你这些朋友的权限,但这并不一定意味着你将获得所有朋友的请求数据 – 是否允许应用程序代表朋友访问这些信息取决于这些用户的个人设置。

特别是对于生日的领域来说,可能只有一天一个月,而不是一年。 当然,就像其他任何信息一样,什么都不是。

终于得到了答案….生日可以通过使用Graph API来检索

https://graph.facebook.com/me/friends?fields=id,name,birthday&access_token=your_access_token

有关更多信息,请参阅此文档 。

我认为我们不能得到朋友的用户名,生日和地点,但我们可以得到login的用户名,生日和所有data.if你find任何解决scheme,然后请让我知道。

在将朋友列表添加到朋友列表之前,您需要查询好友列表中的每个用户。

默认情况下,朋友列表中的FBGraphUser对象只包含2个字段:ID和名称。 通过查询每个朋友的用户名可以获得更多的信息。

一个使用Graph API的例子:

  [FBRequestConnection startWithGraphPath:[friend id] completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { // result is your FBGraphUser object for the queried friend } 

更新 :我忽略了这一点:有一种方法可以让所有的朋友和他们的生日使用查询参数字段。 在这里你可以指定你需要的字段。 (如果您有权限)

http://graph.facebook.com/me/friends?fields=id,name,birthday

这里是你在一个快乐的地方所需要的所有代码。 我不得不阅读大量的文章,以达到这个目的。 它是一个直接的复制和粘贴代码。 评估它,如果有帮助。

在你的* .m文件中

 #import <FacebookSDK/FacebookSDK.h> /****************** FACEBOOK ******************/ - (IBAction) facebookActionBtn { // Open session with public_profile (required) and user_birthday read permissions [FBSession openActiveSessionWithReadPermissions:@[@"public_profile", @"user_friends"] allowLoginUI:YES completionHandler: ^(FBSession *session, FBSessionState state, NSError *error) { __block NSString *alertText; __block NSString *alertTitle; if (!error){ // If the session was opened successfully if (state == FBSessionStateOpen) { // Your code here NSLog(@"all good .."); [self getUserFriendsBDays]; } else { // There was an error, handle it if ([FBErrorUtility shouldNotifyUserForError:error] == YES) { alertTitle = @"Something went wrong"; alertText = [FBErrorUtility userMessageForError:error]; [[[UIAlertView alloc] initWithTitle:alertTitle message:alertText delegate:self cancelButtonTitle:@"OK!" otherButtonTitles:nil] show]; } else { // If the user cancelled login if ([FBErrorUtility errorCategoryForError:error] == FBErrorCategoryUserCancelled) { alertTitle = @"Login cancelled"; alertText = @"Your friends birthday will not be entered in our calendar because you didn't grant the permission."; [[[UIAlertView alloc] initWithTitle:alertTitle message:alertText delegate:self cancelButtonTitle:@"OK!" otherButtonTitles:nil] show]; } else { NSLog(@"error 2 .."); } } } } }]; } - (IBAction) getUserFriendsBDays { NSLog(@"promptUserForFriendsBDays ..."); NSString *fbAccessToken = [[[FBSession activeSession] accessTokenData] accessToken]; //NSLog(@"permissions::%@ ... fbAccessToken: %@ ...",FBSession.activeSession.permissions, fbAccessToken); NSString *request = [NSString stringWithFormat:@"https://graph.facebook.com/me/friends?fields=id,name,birthday&access_token=%@",fbAccessToken]; NSURL *URL = [NSURL URLWithString:request]; NSError *error; NSString *FBOutPutStr = [NSString stringWithContentsOfURL:URL encoding:NSUTF8StringEncoding error:&error]; //NSLog(@"FBOutPutStr: %@ ...", FBOutPutStr); // Convert to JSON object: NSDictionary* jsonObject = [NSJSONSerialization JSONObjectWithData:[FBOutPutStr dataUsingEncoding:NSUTF8StringEncoding] options:0 error:NULL]; //NSLog(@"jsonObject=%@ ...", jsonObject); NSArray* dataField = [[NSArray alloc] initWithArray:[jsonObject objectForKey:@"data"]]; NSLog(@"dataField=%@ ...", dataField); // Extract values: NSArray *userIDArray = [dataField valueForKey:@"id"]; NSArray *userNameArray = [dataField valueForKey:@"name"]; NSArray *userBdayArray = [dataField valueForKey:@"birthday"]; NSLog(@"userIDArray=%d ... userNameArray=%d ... userBdayArray=%d ...", [userIDArray count],[userNameArray count],[userBdayArray count]); }