注册Facebook有时不提供电子邮件

我正在使用Facebook注册作为login到我的networking应用程序的方式之一,并明确要求“电子邮件”的权限..

在login时,一些用户数据( $facebook->api('/me') )被存储到用户数据库中,但是,有时邮件字段不存在 – 这是一个常见的问题吗?

只是一个猜测…

Facebook的文档说:

注意:如果用户没有有效的电子邮件地址,则不会返回该字段

来源: https : //developers.facebook.com/docs/reference/api/user/

因此,当一个电子邮件地址变得无效(例如未使用Facebook的用户,因为例如已经销毁/更改了他们的电子邮件地址),facebook可能会停止返回该字段。

5%的无效地址可能听起来很大,但如果我检查我的脸书朋友,我认为他们中有超过5%的人从不使用他们的帐户,如果他们login时使用的地址现在无效,我不会感到惊讶。

用户并不总是必须提供一个电子邮件地址才能使用Facebook。 他们也可以通过短信进行注册,尽pipe这种情况远不常见。

简而言之,FB并不总是有一个电子邮件地址,所以不能将其提供给您的应用程序。

尝试:

 // Just to make sure email are permitted //$facebook->getLoginUrl(array('req_perms' => 'email')) // Request email FB.api('/me?scope=email', function(response) { /*...*/ }); 

要么:

 $email = $facebook->api('user_id?fields=email'); 

问题:

  • 用户将其电子邮件地址的可见性更改为“只有我”,因此你没有办法得到它。
  • 如前面的回答中所提到的,用户使用SMS而不是电子邮件进行注册。

替代scheme:

如果你绝对需要联系用户,但你不能得到它的电子邮件地址,你仍然可以得到它的Facebook电子邮件(每个人都有这个电子邮件):“user_name@facebook.com”。

如果用户使用POP服务器,他将直接收到GMail或其他人的电子邮件,如果不是,他会收到您的电子邮件作为私人消息。 这个方法唯一的缺点是你的电子邮件必须是“纯文本”而不​​是“HTML”。

有一件事是Users don't always have to provide an email address in order to use Facebook(could have registered through mobile) – 正如Colm所说。 除此之外-

请检查用户是否确实授予了您的email扩展权限或者其后没有被撤销。 要对此进行检查,您可以使用权限api-

 /USER/permissions 

我有类似的问题,我find了这个原因。 对于在“常规帐户”设置选项卡下没有设置其主要电子邮件地址的用户(他们有许多电子邮件地址,但没有指出他们的主要电子邮件地址),则会出现此问题。

我尝试在各种有Facebooklogin的着名网站上使用这样的帐户,甚至无法从这些帐户中检索电子邮件地址。

所以,它不是代码的问题(假设你已经要求权限)。 我们只需要处理这种情况,并让用户知道我们没有收到他们的电子邮件地址。 像Klout一样。

谢谢