我正在尝试通过我的应用程序登录来获取用户名,facebook id和他们的电子邮件。以下是我的app委托:
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI :(FBSessionStateHandler)handler{
NSArray *permissions = [NSArray arrayWithObjects:@"basic_info", @"email", nil];
return [FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:allowLoginUI completionHandler:handler];
}
和我的completionHandler
代码都在这里:
void (^fbCompletionHandler)(FBSession *session, FBSessionState state, NSError *error) = ^(FBSession *session, FBSessionState state, NSError *error) {
switch (state) {
case FBSessionStateOpen:
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
}
if (error && [FBErrorUtility shouldNotifyUserForError:error]) {
NSLog(@"%@", error.localizedDescription);
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Oops" message:[FBErrorUtility userMessageForError:error] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
}
if (session.isOpen) {
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
if (!error) {
[self performLoginOperation:user];
}
}];
}
};
我正在访问用户电子邮件:[user objectForKey:@"email"]
。它大部分时间都有效,但我偶尔得到一个nil
值。我不确定为什么因为我在权限中设置了它?还有其他原因吗?
我试图深入研究其他SO帖子但找不到答案:
Facebook SDK email sometimes returns null - Android
答案 0 :(得分:3)
我有类似的情况,即用户对象不包含响应中的电子邮件。我的情况是用户电子邮件地址实际上待审核。在https://developers.facebook.com/docs/reference/api/user/中的Facebook图表API文档中,对于电子邮件字段,它声明:
注意:如果用户没有有效的电子邮件地址,则不会返回此字段
看看这是否也是您遇到问题的原因。