我使用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";
但我需要真正的邮件,所以我必须提出一个新的解决方案。 我没有注意到有问题的用户有什么特别之处。 任何想法可能是什么问题?
答案 0 :(得分:5)
这似乎是一个众所周知的问题......出于很多原因,并非Facebook上的所有人都注册了电子邮件地址。
但正如我所说,我的问题是我需要一封真实的邮件。 所以最简单的解决方案是使用用户的Facebook Email:user_name@facebook.com
NSString *email = [user objectForKey:@"email"] ? [user objectForKey:@"email"] : [NSString stringWithFormat:@"%@@facebook.com", user.username];
答案 1 :(得分:1)
以下是我如何做到这一点,在任何情况下它总是对我有用: (我想您已在代码中添加了电子邮件权限)
第1步
在Xcode
中打开 Facebook Framework 文件夹,找到FBGraphUser.h
班级
如您所见,您拥有从 Facebook Framework 中使用的所有属性,以获取用户详细信息,因此在那里添加其他属性(复制并粘贴下面的代码):
步骤 2
@property (retain, nonatomic) id<FBGraphUser> email;
你很高兴去!
答案 2 :(得分:0)
您可以查看以下几项内容:
确保您在登录请求对话框中请求电子邮件范围权限:
https://www.facebook.com/dialog/oauth?client_id=APP&redirect_uri=REDIRECT&state=UNIQUE&scope=email
检查您获得的访问权限是否实际授予了Access Token Debugger 的电子邮件权限。
答案 3 :(得分:0)
通过 电话号码 而不是电子邮件验证的所有Facebook帐户将获得NULL
的{{1}}
答案 4 :(得分:0)
如果未经过验证,Facebook将无法退回电子邮件地址。
https://developers.facebook.com/docs/graph-api/reference/v2.2/user
此人在其个人资料中列出的主要电子邮件地址。如果没有有效的电子邮件地址,则不会返回此字段。