【问题标题】:Facebook Graph API won't return email addressFacebook Graph API 不会返回电子邮件地址
【发布时间】:2013-05-13 21:59:25
【问题描述】:

编辑:不重复,因为:

  • 我有权限
  • 调试令牌
  • 代码适用于测试用户

请不要在未阅读的情况下标记为重复。

我正在尝试获取用户的电子邮件地址,但我不明白。在graph api explorer上,当我点击发送时,电子邮件字段变灰并显示:

字段为空或被访问令牌禁止

但是当我调试令牌时,它已授予电子邮件权限

我的个人资料有一个电子邮件地址。

更新:我试过 https://developers.facebook.com/tools/console/ 。我的个人资料没有返回任何内容,即使在另一台计算机上也是如此。但同样的代码会返回另一个帐户的电子邮件、姓名和 uid。

代码:

    <fb:login-button scope="email">
  Grant Permissions to make more examples work
</fb:login-button>

<button onclick="doPost()">Post to Stream</button>

<script>
function userData() {
  FB.api('/me?fields=name,email', Log.info.bind('/me callback'));
};

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    userData();
  }
});
</script>

可以锁定您的电子邮件,这样没人能拥有它吗?即使我授予权限?

【问题讨论】:

  • @karthikr,不,已添加范围,已授予权限(调试显示令牌具有电子邮件权限),但没有电子邮件...我可以获取另一个数据,只是电子邮件不会来。为了清楚起见,我正在使用 javascript sdk 并使用 Graph API Explorer。
  • 您找到解决方案了吗?我遇到了同样的问题,这让我发疯了!
  • @MihaiFratu,不...我尝试了我发现的所有内容,但情况非常不一致,一些用户(比如你可以设置的测试用户)工作和生活的用户来自一些具有有效主 e 的朋友- 不会的邮件地址。
  • 我还没有尝试过这个,但是从你的错误报告的回复中我了解到你没有确认你的电子邮件地址?尝试这样做,也许会有所帮助。

标签: javascript facebook


【解决方案1】:

Marcus 的answer 将我引向了我所面临的真正问题。

使用 Facebook Explorer 工具进行调试,我发现在成功登录后,我应该在 FB.api() 方法中使用 set the email scope

FB.login(function(response) {
    if (response.status === 'connected'){
        FB.api('/me?fields=id,email,name', function(data) {
        console.log( data.email ) // it will not be null ;)
    })
}, {scope: 'email'});

Quickstart 指南中的内容不太清楚,我希望它也对其他人有所帮助。

【讨论】:

  • URL 上的这个参数加上范围“电子邮件”对我​​来说效果很好,谢谢!
  • api请求中的?fields=...,email,...很重要!!这是前一段时间不需要收到电子邮件,只需 /me 就足够了;显然没有了。我只是花了几个小时试图找到这个问题;非常感谢!
  • 在外面收钱
  • scope 的包含为我解决了这个问题。
  • 谢谢!!最后一个参数的作用域做到了!
【解决方案2】:

新的 facebook 图表需要在 /me 请求中添加如下范围:

/me?fields=email,birthday,location,locale,age_range,currency,first_name,last_name,name_format,gender&access_token=

【讨论】:

  • 适用于 v2.8 Graph API
  • 我们在 2019 年,这实际上对我有用! (v3.2 图形 API)
  • v3.3 不需要 access_token 参数,非常感谢!
【解决方案3】:

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

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

【讨论】:

  • 这是一个很好的解决方法...唯一的问题是,如果您尝试发送一些邮件或其他类型的电子邮件通信,它将转到 facebook 上的“其他”收件箱.
  • 如果我的回答对你来说足够了,请标记为这样,谢谢:)
  • @ozba facebook 电子邮件可以被禁用,我知道很多人因为垃圾邮件的原因而禁用了它。此外,无法再从 Graph API 获取用户名。所以你不应该依赖 Facebook 电子邮件。
【解决方案4】:

我在为我的网站开发 fb 登录按钮时遇到了同样的问题。我什至在这里为我的应用设置了权限:

https://developers.facebook.com/apps/<my-app-ID>/permissions

它在某些初始情况下运行良好,也就是说,它正在发送电子邮件(我在我自己的帐户上对其进行了测试,它正在发送我的电子邮件)。然后突然它开始反映根本没有电子邮件。浏览了两个小时后,我发现访问令牌存在问题,就像我访问此链接时一样:

https://developers.facebook.com/tools/explorer/<your-fb-id>/?method=GET&path=100002451127858%3Ffields%3Did%2Cemail

使用您的 id 更新 your-fb-id 并转到上面的链接。单击“获取访问令牌”。在打开的选项卡中,单击“扩展权限”,然后选择“电子邮件”并提交。现在,再次测试您的查询。它肯定会在控制台和您的网站上工作。干杯! :)

【讨论】:

  • 谢谢它对我有用(注意:您会找到获取用户访问令牌选项,然后从列表中选择电子邮件)
【解决方案5】:

在我将错误报告标记为重复并阅读了那里的所有帖子和链接后,我了解了导致此问题的原因以及如何解决。

问题 Facebook 似乎有时会忘记您在图形 API 上的主要电子邮件是什么(但它仍然存在于首选项中。)

解决方案 受影响的用户必须删除电子邮件,保存设置,然后重新添加地址,重新确认,然后将其设为主要地址。这修复了我在沙盒应用和其他无法使用 Facebook 登录的应用上的帐户。

【讨论】:

  • 另一种解决方案是向您的帐户添加另一个电子邮件地址,原来的电子邮件地址现在成为主要地址
  • 解决方案如何?这只是意味着我们失去了客户,我们甚至无法告诉他原因,因为我们没有他的电子邮件。
  • @shredding,它不是解决方案,它是 Facebook 方面的问题......你可以做的是检查你是否收到了电子邮件,如果不,向用户索取...
【解决方案6】:

这是一个已知的错误。如果用户没有将任何电子邮件地址设置为主要地址,则查询将为电子邮件返回 null。将您帐户的电子邮件地址设置为主要https://www.facebook.com/settings?tab=account&section=email&view,然后尝试。

来源:https://developers.facebook.com/bugs/298946933534016/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-29
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多