我在.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)
请告诉我是否做错了。
答案 0 :(得分:3)
您是否首先要求permissions权利?
您需要user_birthday
和friends_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]);
}