无法在Facebook ios SDK中获取已登录人员的电子邮件ID

时间:2015-04-07 05:23:54

标签: ios objective-c facebook facebook-graph-api

我正在使用Facebook IOS应用程序从Facebook获取用户数据(公共资料,电子邮件)。实施登录过程后,我可以获取用户个人资料图片的名字,姓氏和网址,但电子邮件我得到的是null。我已经通过了获取公开个人资料和Emial的许可。但我没有收到该人的电子邮件。

我正在使用facebook SDK for ios V4.0.1

这是我的代码

        [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me"
                                     parameters:@{@"fields": @"first_name, last_name, picture, email"}]
                              startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error) {                    
NSString *firstName = [NSString stringWithFormat:@"%@",[result objectForKey:@"first_name"]];

NSString *lastName = [NSString stringWithFormat:@"%@",[result objectForKey:@"last_name"]];
NSString *email = [NSString stringWithFormat:@"%@",[result objectForKey:@"email"]];
NSString *picurl = [NSString stringWithFormat:@"%@",[result objectForKey:@"picture"]];

 NSLog(@"email is %@", [result objectForKey:@"email"]);

 NSLog(@"picture is %@", [result objectForKey:@"picture"]);
 }
 else{
 NSLog(@"%@", [error localizedDescription]);
}
 }];

我收到以下输出:

email is (null)
picture is {
    data =     {
        "is_silhouette" = 0;
        url = "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xfp1/v/t1.0-1/p50x50 **************_************_n.jpg?oh=ed5fd60c770cb5f34424b3fcfb4ca174&oe=559F472D&__gda__=1437970763_989a264cf7ec16f5d51b0a58b7e7f609";
    };
}

为什么我没有收到用户的电子邮件地址

2 个答案:

答案 0 :(得分:8)

登录时。您必须询问用户对电子邮件的许可,否则您将收到电子邮件(null)。

无法获取电子邮件ID

FBSDKLoginButton *loginView = [[FBSDKLoginButton alloc] init];
 loginView.readPermissions =  @[@"public_profile"];

如果您以上述权限登录,那么您将无法获得电子邮件ID,它将始终返回(null)。

将使用公开个人资料

获取电子邮件ID
FBSDKLoginButton *loginView = [[FBSDKLoginButton alloc] init];
loginView.readPermissions =  @[@"email"];

我们的应用会在成功登录后自动获得public_profile权限,但不会收到电子邮件。

同样适用于自定义登录。

请参阅:https://developers.facebook.com/docs/facebook-login/ios/v2.3#login-apicalls

答案 1 :(得分:0)

如果您假设将FBSDKLoginButton.readPermissions设置为["public_profile","email"]的方式表达您希望Facebook用户的"public_profile"及其"email"地址的方式,您将会非常痛苦错误。在我看来非常混乱,下面给出了Facebook用户的公开个人资料和他们的电子邮件地址:

FBSDKLoginButton.readPermissions = ["email"]