Facebook电子邮件字段返回null(即使设置并接受“电子邮件”权限)

时间:2013-07-08 17:20:59

标签: facebook facebook-graph-api

对于我们应用程序中的某些用户,即使用户已授予对应用程序的电子邮件访问权限,电子邮件字段也会返回NULL。 通过Debugger工具检查范围参数和用户令牌的有效性时,一切正常。许可电子邮件已被接受。 但是当我们向Graph API询问具有有效用户令牌的用户的电子邮件时,它根本不会出现。

即使用户授予了电子邮件权限,用户还是可以阻止应用收到他的电子邮件吗?

由于

14 个答案:

答案 0 :(得分:92)

我有同样的问题,我想我发现了原因: 如果用户在Facebook上有未经证实的电子邮件(即Facebook向用户的电子邮件地址发送了验证邮件,但他没有回复),即使Facebook向您提供了电子邮件权限,也不会将该电子邮件传递给您的应用。

所以我所做的就是使用他或她的Facebook电子邮件,如果用户有一个用户名(即userName@facebook.com)。

答案 1 :(得分:9)

我有同样的问题。它在我的本地主机上运行正常,我使用php SDK进行facebook登录,当我提交请求时,它返回所有字段,如用户的电子邮件,名称等,但在服务器上以某种方式它不起作用。它不会返回用户的电子邮件。 我已经做了很多研发,我有解决问题的方法。 :)

$profile = $facebook->api('/me?fields=email,first_name,last_name');

如果你使用php-sdk只是传递这样的字段,它会返回电子邮件,first_name等。 希望它适合所有人。 感谢。

答案 2 :(得分:7)

如果用户使用他们的电话号码登录,则Facebook不会发送电子邮件。 查看有关https://github.com/mkdynamic/omniauth-facebook/issues/61的评论以获取更多信息。

答案 3 :(得分:5)

您需要知道的所有内容:

1)Link 1

  

一些可能的原因:

     

帐户没有电子邮件地址

     

帐户中未确认电子邮件地址

     

帐户中没有经过验证的电子邮件地址

     

用户输入了一个安全检查点,要求他们重新确认他们的电子邮件地址,但他们尚未这样做

     
      
  • 用户的电子邮件地址无法访问

  •   
  • 您还需要“电子邮件”扩展权限,即使对于拥有该权限的用户也是如此   已存档的有效,已确认,可访问的电子邮件地址。

  •   

2)Link 2

  

请注意,即使您申请电子邮件权限,也不能保证   你会得到一个电子邮件地址。例如,如果有人注册了   Facebook上有电话号码而不是电子邮件地址,电子邮件   字段可能是空的。

答案 4 :(得分:3)

您必须提供电子邮件权限以及身份验证按钮。

authButton.setReadPermissions(Arrays.asList("email"));

答案 5 :(得分:2)

在某些情况下,Facebook可能没有用户的有效电子邮件地址:

  

email:包含有效RFC822电子邮件地址的字符串 - 注意:这个   如果没有可供该用户使用的电子邮件地址,则该字段可能为null

请参阅https://developers.facebook.com/docs/reference/api/user/

答案 6 :(得分:1)

Facebook将为您提供用户的电子邮件ID,当且该用户的确认电子邮件ID与其帐户相关联。如果您的应用可以检索某些用户的电子邮件ID,则开发人员可能无法解决问题。

答案 7 :(得分:1)

@ozba解决方案不适用,因为当用户拥有未经证实的电子邮件地址时,Facebook现在会显示警告消息。所以,如果你遇到这个问题,那就更喜欢用户使用电话号码注册了。 Message when trying to access email

一些可能的原因:

  • 帐户中没有电子邮件地址(仅限电话号码)
  • 帐户中未确认电子邮件地址
  • 用户输入了一个安全检查点,要求他们重新确认他们的电子邮件地址,但尚未完成,因此用户的电子邮件地址无法访问。

检查:https://developers.facebook.com/bugs/298946933534016

答案 8 :(得分:1)

根据documentation

  

请注意,即使您申请电子邮件权限,也不能保证您会收到电子邮件地址。例如,如果有人使用电话号码而不是电子邮件地址注册Facebook,则电子邮件字段可能为空。

这可以解释为什么有些用户会收到null电子邮件!

答案 9 :(得分:1)

我已经阅读了之前的回复,但是有些回复,如果用户没有确认电子邮件但是手机号码,很多时候会发生错误,忽略如何使用FB api图表请求信息。假设您的登录成功完成,您现在拥有访问令牌和用户ID,但仍然无法看到您感兴趣的电子邮件和其他字段。确认登录状态为已连接后继续使用此请求:

FB.api(
  '/me',
  'GET',
  {"fields":"id,name,birthday,email,about,cover"},
  function(response) {
      // Insert your code here
  }
);

取决于您所要求的权限,您现在可以根据自己的需要获取更多信息。

答案 10 :(得分:0)

你可以尝试一下它会起作用 String email = user.getProperty(" email")。toString(); String safeEmail = user.asMap()。get(" email")。toString();

答案 11 :(得分:0)

您还需要获得Facebook的一项许可。

包括(about_me)对facebook开发设置以及您的应用或代码的许可..

答案 12 :(得分:0)

您只需向想要从Facebook对象中获取有关用户enter image description here的任何数据添加更多权限

facebook api

答案 13 :(得分:-1)

$loginUrl = $facebook->getLoginUrl(
  array(
    'req_perms' => 'email'
  )
);