无法获得FBGraphUser电子邮件

时间:2014-04-20 13:31:52

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

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

我要求“电子邮件”许可:

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

大多数时候,我确实收到用户的电子邮件:

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

有时我不这样做。 (我可以看到NSDictionary不包括电子邮件)。

我正在使用此修复程序,因此当我稍后使用电子邮件时,应用程序将不会终止,并且其nil:

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

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

5 个答案:

答案 0 :(得分:5)

这似乎是一个众所周知的问题......出于很多原因,并非Facebook上的所有人都注册了电子邮件地址。

但正如我所说,我的问题是我需要一封真实的邮件。 所以最简单的解决方案是使用用户的Facebook Email:user_name@facebook.com

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

答案 1 :(得分:1)

以下是我如何做到这一点,在任何情况下它总是对我有用: (我想您已在代码中添加了电子邮件权限)

第1步

Xcode中打开 Facebook Framework 文件夹,找到FBGraphUser.h班级

如您所见,您拥有从 Facebook Framework 中使用的所有属性,以获取用户详细信息,因此在那里添加其他属性(复制并粘贴下面的代码):

步骤 2

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

你很高兴去!

答案 2 :(得分:0)

您可以查看以下几项内容:

  1. 确保您在登录请求对话框中请求电子邮件范围权限:

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

  2. 检查您获得的访问权限是否实际授予了Access Token Debugger 的电子邮件权限。

答案 3 :(得分:0)

通过 电话号码 而不是电子邮件验证的所有Facebook帐户将获得NULL的{​​{1}}

答案 4 :(得分:0)

如果未经过验证,Facebook将无法退回电子邮件地址。

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

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