我检查了这个。
在我的 Facebook 个人资料上,我将生日外观设置为“仅限日期和月份”
在我的应用程序中,我使用以下权限登录:
NSArray *permissions = [[NSArray alloc] initWithObjects:@"user_birthday",
@"email",
@"user_about_me",
@"user_hometown",
nil];
FBSession *session = [[FBSession alloc] initWithAppID:nil
permissions:permissions
urlSchemeSuffix:nil
tokenCacheStrategy:_tokenCaching];
当然,你只需要@"user_birthday"
许可。
然后我有fetchUserData
方法:
- (void)fetchUserData
{
if (FBSession.activeSession.isOpen)
{
[[FBRequest requestForMe] startWithCompletionHandler:
^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *user,
NSError *error)
{
if (!error)
{
NSLog (@"FB: id: %@", user.id);
NSLog (@"FB: username: %@", user.username);
NSLog (@"FB: link: %@", user.link);
NSLog (@"FB: name: %@", user.name);
NSLog (@"FB: first_name: %@", user.first_name);
NSLog (@"FB: last_name: %@", user.last_name);
NSLog (@"FB: middle_name: %@", user.middle_name);
NSLog (@"FB: birthday: %@", user.birthday);
NSLog (@"FB: email: %@",[user objectForKey:@"email"]);
NSLog (@"FB: gender: %@",[user objectForKey:@"gender"]);
}
}];
}
}
即使我设置了“仅限日期和月份”,fetchUserData 中的结果也是:
FB: birthday: 08/16/1978
编辑:
这仅适用于登录用户。对于他的朋友,您将只能获得他们允许在时间线上发布的数据(即使使用 FQL)。
您可以在Graph API Explorer (FQL Query)中尝试 FQL 查询返回的内容
确保首先获得用户friends_birthday权限的访问令牌(通过获取访问令牌按钮)
运行查询:
SELECT uid, name, birthday_date from user where uid IN (SELECT uid2 FROM friend WHERE uid1=your_facebook_id_here)
如果您检查结果,您会发现可能的格式是:
完整的生日:MM/DD/YYYY
月份和日期:MM/DD
不显示:<null>
所以你最好听从 Anoop Vaidya 的建议。