不能得到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;
你很好走!
你可以检查几件事情:
-
确保您在login请求对话框中请求电子邮件作用域权限:
https://www.facebook.com/dialog/oauth?client_id=APP&redirect_uri=REDIRECT&state=UNIQUE&scope=email
-
检查您获取的访问令牌是否具有 访问令牌debugging器 授予的电子邮件许可权 。
通过电话号码而不是电子邮件validation的所有Facebook帐户将获得NULL
[user objectForKey:@"email"]
如果未经过validation,Facebook将不会返回该电子邮件地址。
https://developers.facebook.com/docs/graph-api/reference/v2.2/user
此人在其个人资料中列出的主要电子邮件地址。 如果没有有效的电子邮件地址,则不会返回此字段。