58

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

有没有一种方法可以阻止应用程序获取他的电子邮件,即使他授予了电子邮件权限?

谢谢

4

14 回答 14

102

我遇到了同样的问题,我想我找到了原因:如果用户在 Facebook 中有一封未经确认的电子邮件(即 Facebook 向他发送了一封验证邮件到用户的电子邮件地址,但他没有回复)Facebook 不会将该电子邮件传递给您的应用程序,即使他给了您电子邮件权限。

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

于 2013-12-15T12:34:28.200 回答
11

我有同样的问题。它在我的本地主机上运行良好,我使用 php SDK 进行 facebook 登录,当我提交请求时,它会返回用户的所有字段,如电子邮件、姓名等,但在服务器上不知何故它不起作用。它不会返回用户电子邮件. 我在这方面做了很多研发,我有解决这个问题的办法。:)

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

如果您使用 php-sdk 只是传递这样的字段,它会返回电子邮件、名字等。希望它对你们所有人都有效。谢谢。

于 2015-10-12T05:39:28.823 回答
9

所有你必须知道的:

1)链接 1

一些可能的原因:

帐户上没有电子邮件地址

帐户上没有确认的电子邮件地址

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

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

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

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

2)链接 2

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

于 2017-10-07T19:59:24.940 回答
8

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

于 2014-12-30T14:28:48.837 回答
3

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

authButton.setReadPermissions(Arrays.asList("email"));
于 2014-11-11T06:12:21.057 回答
2

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

电子邮件:包含有效 RFC822 电子邮件地址的字符串 - 注意:如果用户没有可用的电子邮件地址,此字段可能为空

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

于 2013-07-08T21:30:37.913 回答
2

@ozba 解决方案不适用,因为当用户拥有未确认的电子邮件地址时,facebook 现在会显示一条警报消息。因此,如果您遇到此问题,则更喜欢用户使用电话号码注册。 尝试访问电子邮件时的消息

一些可能的原因:

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

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

于 2015-04-17T07:57:30.883 回答
2

根据文档

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

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

于 2016-12-13T04:38:38.033 回答
1

当且仅当该用户具有与其帐户关联的确认电子邮件 ID 时,Facebook 才会向您提供用户的电子邮件 ID。如果您的应用程序可以检索某些用户的电子邮件 ID,则问题可能与开发人员无关。

于 2013-07-09T13:13:29.013 回答
1

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

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

取决于您请求的权限,您现在将能够根据您的需要获取更多信息。

于 2017-05-01T17:21:48.320 回答
0

你可以试试这个它会工作 String email = user.getProperty("email").toString(); String safeEmail = user.asMap().get("email").toString();

于 2014-01-24T13:14:48.363 回答
0

您还需要 facebook 的一项许可。

包括(about_me)对 facebook 开发设置以及您的应用程序或代码的权限。

于 2016-08-02T12:25:24.637 回答
0

只是您需要为您想要从 Facebook 对象获取的有关您的用户的任何数据添加更多权限在此处输入图像描述

脸书API

于 2020-11-11T11:40:35.440 回答
-1
$loginUrl = $facebook->getLoginUrl(
  array(
    'req_perms' => 'email'
  )
);
于 2016-06-08T13:09:24.213 回答