Facebook iOS SDK有时会为电子邮件返回null

时间:2013-08-27 00:33:49

标签: facebook-ios-sdk

我正在尝试通过我的应用程序登录来获取用户名,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

Facebook SDK 3.0: how to receive user's e-mail?

PHP SDK 3.1.1 getUser() sometimes return 0

1 个答案:

答案 0 :(得分:3)

我有类似的情况,即用户对象不包含响应中的电子邮件。我的情况是用户电子邮件地址实际上待审核。在https://developers.facebook.com/docs/reference/api/user/中的Facebook图表API文档中,对于电子邮件字段,它声明:

注意:如果用户没有有效的电子邮件地址,则不会返回此字段

看看这是否也是您遇到问题的原因。