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

时间:2012-09-28 05:43:23

标签: ios facebook-graph-api

我在.h文件中实现了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)

请告诉我是否做错了。

5 个答案:

答案 0 :(得分:3)

您是否首先要求permissions权利?

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

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

特别是对于生日场,可能是你只会获得日期和月份,而不是年份。或者当然,和任何其他信息一样,什么也没有。

答案 1 :(得分:2)

终于得到了答案....可以使用Graph API

检索生日
  

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

另请参阅this documentation 了解更多信息。

答案 2 :(得分:0)

我认为我们无法获得朋友的用户名,生日和位置,但我们可以获得登录用户的用户名,生日和所有数据。如果您找到任何解决方案,请告诉我。

答案 3 :(得分:0)

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

默认情况下,好友列表中的FBGraphUser对象只包含两个字段:ID和名称。 通过查询每个朋友的用户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

答案 4 :(得分:0)

以下是您在一个快乐的地方需要的所有代码。为了达到这个目的,我不得不阅读大量的帖子。它是一个直接的复制和粘贴代码。如果有帮助,请对其进行评分。

在* .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]);

}