不能得到FBGraphUser电子邮件

我使用Facebooklogin与我的应用程序。 (Facebook iOS SDK版本3.11.1)

我要求“电子邮件”权限:

NSArray *permissions = [NSArray arrayWithObjects: @"basic_info", @"email", nil]; 

大多数情况下,我确实收到用户的电子邮件:

 NSString *email = [user objectForKey:@"email"]; //user is (NSDictionary<FBGraphUser> *) 

有时候我不知道 (我可以看到,NSDictionary不包括电子邮件)。

我正在使用此修复程序,所以当我以后使用电子邮件和它的零时,应用程序不会终止:

 NSString *email = [user objectForKey:@"email"] ? [user objectForKey:@"email"] : @"NO_EMAIL"; 

但是我需要真正的邮件,所以我必须想出一个新的解决scheme。 我没有注意到有问题的用户有什么特别的。 任何想法可能是什么问题?

看来,它是一个众所周知的问题…由于很多原因,Facebook上的每个人都没有注册电子邮件地址。

但正如我所说,我的问题是,我需要一个真正的邮件。 所以最简单的解决scheme是使用用户的Facebook电子邮件:user_name@facebook.com

 NSString *email = [user objectForKey:@"email"] ? [user objectForKey:@"email"] : [NSString stringWithFormat:@"%@@facebook.com", user.username]; 
  • 有些链接指出,你不能发送HTML电子邮件到Facebook的邮件,只有纯文本!

下面是我如何做到这一点,它总是在任何情况下对我很好:(我想你已经在你的代码中添加了电子邮件许可)

步骤1

Xcode打开Facebook Framework文件夹并findFBGraphUser.h

正如你所看到的,你有那里所有的属性,你使用从Facebook的框架 ,以获取用户的详细信息,所以在那里添加其他属性(复制并粘贴下面的代码):

2

  @property (retain, nonatomic) id<FBGraphUser> email; 

你很好走!

你可以检查几件事情:

  1. 确保您在login请求对话框中请求电子邮件作用域权限:

    https://www.facebook.com/dialog/oauth?client_id=APP&redirect_uri=REDIRECT&state=UNIQUE&scope=email

  2. 检查您获取的访问令牌是否具有 访问令牌debugging器 授予的电子邮件许可权

通过电话号码而不是电子邮件validation的所有Facebook帐户将获得NULL [user objectForKey:@"email"]

如果未经过validation,Facebook将不会返回该电子邮件地址。

https://developers.facebook.com/docs/graph-api/reference/v2.2/user

此人在其个人资料中列出的主要电子邮件地址。 如果没有有效的电子邮件地址,则不会返回此字段。