0

我试图通过我的应用程序登录来获取用户名、facebook id 和他们的电子邮件。以下是我的应用程序委托:

- (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 电子邮件有时返回 null - Android

Facebook SDK 3.0:如何接收用户的邮件?

PHP SDK 3.1.1 getUser() 有时返回 0

4

1 回答 1

3

我有类似的情况,用户对象不包含响应的电子邮件。我的情况是用户电子邮件地址实际上正在等待验证。在https://developers.facebook.com/docs/reference/api/user/的 Facebook 图形 API 文档中,对于电子邮件字段,它指出:

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

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

于 2013-09-10T09:18:29.697 回答