Facebook 电子邮件字段返回 null(即使设置并接受了“电子邮件”权限)
Posted
技术标签:
【中文标题】Facebook 电子邮件字段返回 null(即使设置并接受了“电子邮件”权限)【英文标题】:Facebook Email field return null (even if the “email” permission is set and accepted) 【发布时间】:2013-07-06 03:07:15 【问题描述】:对于我们应用程序中的某些用户,即使用户已授予应用程序的电子邮件访问权限,电子邮件字段也会返回 NULL。 当我们借助 Debugger 工具检查范围参数和用户 Token 的有效性时,一切正常。许可电子邮件已被接受。 但是当我们向 Graph API 请求具有有效用户令牌的用户的电子邮件时,它根本不会出现。
即使用户授予电子邮件权限,是否有办法阻止应用获取他的电子邮件?
谢谢
【问题讨论】:
对于 php Sdk,这个link 可能会有所帮助! 确保您在 OAuth 调用中获得了包含scope: ['email']
的访问令牌。请务必使用Graph API Explorer 尝试您的访问令牌,并确保左侧的“电子邮件”权限未灰显。
【参考方案1】:
我遇到了同样的问题,我想我找到了原因: 如果用户在 Facebook 中有一封未经确认的电子邮件(即 Facebook 向他发送了一封验证邮件到用户的电子邮件地址但他没有回复)即使他给了您电子邮件权限,Facebook 也不会将该电子邮件传递给您的应用程序。
如果用户有用户名(即 userName@facebook.com),我所做的就是使用他或她的 Facebook 电子邮件。
【讨论】:
我刚刚确认了这个问题。即使在明确询问用户电子邮件之后,Facebook 也不会将此信息提供给您的应用程序,直到用户确认他的电子邮件。谢谢您的回答。我追了很久。 欢迎您,如果@Benjamin Naïm 将我的答案标记为正确... :) @GlennMaynard 即便如此,Facebook 也应该在某个地方记录它,而不是让开发人员绞尽脑汁想弄清楚为什么没有收到电子邮件。 但用户可以根据需要更改用户名。因此,如果用户更改电子邮件,则保存 username@facebook.com 是没有意义的。相反,最好使用对特定用户始终唯一的 uid@facebook.com。 所以我想每个人都忘记了这样一个事实,即用户只能使用他/她的手机号码进行注册,而我认为注册不需要电子邮件,而且显然 Facebook 不会提供手机号码。 Facebook 个人资料在没有主要电子邮件联系人的情况下仍然有效。【参考方案2】:我也有同样的问题。它在我的本地主机上运行良好,我正在使用 php SDK 进行 facebook 登录,当我提交请求时,它会返回用户的所有字段,如电子邮件、姓名等,但在服务器上它以某种方式无法正常工作。它不会返回用户电子邮件. 我在这方面做了很多研发,我有解决这个问题的办法。 :)
$profile = $facebook->api('/me?fields=email,first_name,last_name');
如果你使用 php-sdk 只是传递这样的字段,它会返回电子邮件、名字等。 希望它对你们所有人都有效。 谢谢。
【讨论】:
【参考方案3】:所有你需要知道的:
1) Link 1
一些可能的原因:
帐户中没有电子邮件地址
帐户中没有确认的电子邮件地址
帐户中没有经过验证的电子邮件地址
用户输入了一个安全检查点,要求他们重新确认他们的电子邮件地址,但他们还没有这样做
无法访问用户的电子邮件地址
您还需要“电子邮件”扩展权限,即使对于拥有 存档的有效、确认、可访问的电子邮件地址。
2) Link 2
注意,即使您请求电子邮件权限,也不能保证 你会得到一个电子邮件地址。例如,如果有人注册 使用电话号码而不是电子邮件地址的 Facebook,电子邮件 字段可能为空。
【讨论】:
【参考方案4】:如果用户使用他们的电话号码登录,Facebook 不会发送电子邮件。 查看 https://github.com/mkdynamic/omniauth-facebook/issues/61 上的 cmets 了解更多信息。
【讨论】:
【参考方案5】:您必须授予电子邮件权限以及身份验证按钮。
authButton.setReadPermissions(Arrays.asList("email"));
【讨论】:
【参考方案6】:在某些情况下,Facebook 可能没有用户的有效电子邮件地址:
email:包含有效 RFC822 电子邮件地址的字符串 - 注意:this 如果用户没有可用的电子邮件地址,则字段可能为空
见https://developers.facebook.com/docs/reference/api/user/
【讨论】:
【参考方案7】:@ozba 解决方案不适用,因为当用户拥有未确认的电子邮件地址时,facebook 现在会显示警告消息。因此,如果您遇到此问题,则更喜欢用户使用电话号码注册。
一些可能的原因:
帐户中没有电子邮件地址(只有电话号码) 帐户中没有确认的电子邮件地址 用户进入了一个安全检查点,要求他们重新确认他们的电子邮件地址,但他们尚未这样做,因此无法访问用户的电子邮件地址。检查:https://developers.facebook.com/bugs/298946933534016
【讨论】:
【参考方案8】:根据documentation:
请注意,即使您请求电子邮件许可,也不能保证您会获得电子邮件地址。例如,如果有人使用电话号码而不是电子邮件地址注册 Facebook,则电子邮件字段可能为空。
这可以解释为什么有些用户有null
电子邮件!
【讨论】:
我的帐户中有一个主电子邮件,它已经过验证,但仍然没有收到【参考方案9】:当且仅当该用户具有与其帐户关联的已确认电子邮件 ID 时,Facebook 才会向您提供该用户的电子邮件 ID。如果您的应用可以检索某些用户的电子邮件 ID,则问题可能与开发人员无关。
【讨论】:
【参考方案10】:我已经阅读了之前的回复,但尽管其中一些回复是真实的,例如如果用户没有确认电子邮件而是手机号码,但很多时候会发生此错误,因为忽略了如何使用 FB api 图请求信息。假设您的登录已成功完成,您现在拥有访问令牌和用户 ID 等等,但仍然看不到您感兴趣的电子邮件和其他字段。确认登录状态为已连接后继续使用此请求:
FB.api(
'/me',
'GET',
"fields":"id,name,birthday,email,about,cover",
function(response)
// Insert your code here
);
取决于您请求的权限,您现在将能够根据您的需要获取更多信息。
【讨论】:
【参考方案11】:你可以试试这个,它会起作用的 String email = user.getProperty("email").toString(); String safeEmail = user.asMap().get("email").toString();
【讨论】:
【参考方案12】:您还需要 facebook 的一项许可。
包括 (about_me) 对 facebook 开发设置以及您的应用或代码的权限..
【讨论】:
【参考方案13】:您只需要为您想要从 Facebook 对象获取的关于您的用户 的任何数据添加更多权限
脸书api
【讨论】:
【参考方案14】:$loginUrl = $facebook->getLoginUrl(
array(
'req_perms' => 'email'
)
);
【讨论】:
以上是关于Facebook 电子邮件字段返回 null(即使设置并接受了“电子邮件”权限)的主要内容,如果未能解决你的问题,请参考以下文章
标签字段在使用 facebook api 和 php 时返回 NULL
Facebook Android SDK 即使在许可后也没有电子邮件
即使数据存在,`User` 类型的字段也会为 Query 返回 `null`