Facebook sdk 4 iOS用户信息电子邮件读取权限不起作用

Facebook sdk 4 iOS用户信息电子邮件读取权限不起作用,ios,objective-c,facebook,sdk,Ios,Objective C,Facebook,Sdk,我尝试使用iOS Facebook SDK版本4 我顺利完成了登录,但无法使用graph API获取用户电子邮件地址。如果有人有一个解决方案,它可以是非常酷的 这里是我的代码,在视图中加载: _FBButton = [[FBSDKLoginButton alloc] init]; _FBButton.readPermissions = @[@"public_profile", @"email"]; _FBButton.delegate = self; 以下是登录成功时的方法: - (vo

我尝试使用iOS Facebook SDK版本4

我顺利完成了登录,但无法使用graph API获取用户电子邮件地址。如果有人有一个解决方案,它可以是非常酷的

这里是我的代码,在视图中加载:

_FBButton = [[FBSDKLoginButton alloc] init];
_FBButton.readPermissions = @[@"public_profile", @"email"];



_FBButton.delegate = self;
以下是登录成功时的方法:

- (void)loginButton:(FBSDKLoginButton *)loginButton didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result error: (NSError *)error{



 if ([FBSDKAccessToken currentAccessToken]) {       


    [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]
     startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result2, NSError *error) {

         if (!error) {
             NSLog(@"fetched user:%@", result2);
         }
     }];
  }
}
结果如下:

 "first_name" = Jack;
gender = male;
id = 1381385368853232;
"last_name" = Ammer;
link = "https://www.facebook.com/app_scoped_user_id/1381385368853232/";
locale = "fr_FR";
name = "Jack Ammer";
timezone = 2;
"updated_time" = "2015-04-02T07:26:35+0000";
verified = 1;
那么为什么我可以得到电子邮件地址呢

提前谢谢

编辑

问题可能是因为facebook只向用户询问公共资料,查看图片:为什么readpermissions不起作用


正确检查您必须将用户电子邮件地址输入控制台


在我这端尝试了你的代码,并使用FBSDKGraphRequest获取电子邮件地址。

我的问题是我的facebook帐户没有经过验证的电子邮件地址(是的,这可能会发生!)。请查看您的个人资料设置页面。

我找到了解决方案,我真的不知道为什么,但它确实有效! 这很简单,当Facebook按钮添加到故事板上时,你不应该初始化它。为了解决我的问题,我只需对我初始化按钮的行进行注释

 //facebook
 // _FBButton = [[FBLoginView alloc] initWithReadPermissions:@[@"email"]];

 _FBButton.readPermissions = @[@"email"];
 _FBButton.delegate = self;

现在一切正常;)

对于sdk 4x,您可以使用

当您开始请求权限时,请这样做:(因为graph api目前已升级到2.5,其中电子邮件尚未成为默认权限)

然后在这里面,继续这样

if ([FBSDKAccessToken currentAccessToken])
             {
                 NSMutableDictionary* parameters = [NSMutableDictionary dictionary];
                 [parameters setValue:@"id, name, email, gender" forKey:@"fields"];

                 [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters]
                  startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
{
// fetch all your datas
}];

我认为我不工作,因为当用户登录时,API不要求良好的权限,请看图片。在尝试使用SDK v4之前,只有公共利润,我尝试使用V3,这是相同的问题;(我不明白为什么。你可以试着只发送电子邮件吗?因为默认情况下可以使用public_配置文件。同样的事情……可能需要在facebook开发者控制台的“我的应用程序设置”中设置一些特殊的设置?我也会收到电子邮件,但只在模拟器中收到,而不会在真实设备上发送。嗨,不,我尝试使用多个帐户。这是同样的问题,不是吗这是因为facebook没有向用户询问好的信息。找到解决方案了吗?
if ([FBSDKAccessToken currentAccessToken])
             {
                 NSMutableDictionary* parameters = [NSMutableDictionary dictionary];
                 [parameters setValue:@"id, name, email, gender" forKey:@"fields"];

                 [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters]
                  startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
{
// fetch all your datas
}];