2013-07-08 52 views
43

对于我们应用程序中的某些用户,即使用户已授予应用程序的电子邮件访问权限,电子邮件字段也会返回NULL。 当我们通过调试器工具检查范围参数和用户令牌的有效性时,一切正常。权限电子邮件已被接受。 但是,当我们使用有效的用户令牌向图形API请求用户的电子邮件时,它根本没有出现。Facebook电子邮件字段返回空(即使“电子邮件”权限已设置并被接受)

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

感谢

+0

对于PHP SDK,此[链接](http://stackoverflow.com/questions/25069816/facebook-email-field-return-null-even-if-the-email-permission-is-set- and-acce/36332882#36332882)可能会有帮助! –

+0

确保OAuth调用您使用包含'scope:['email']'获得访问令牌。请务必使用[图形API资源管理器](https://developers.facebook.com/tools/explorer/)尝试使用标记,并确保左侧的“电子邮件”权限*不会变灰。 –

回答

83

我有同样的问题,我想我找到了原因: 如果用户有一个未经确认的电子邮件在Facebook(即Facebook发给他一个验证邮件到用户的电子邮件地址,但他没有回应)Facebook不会即使他给了你电子邮件许可,也会将该电子邮件传递给你的应用。

所以我做的是使用他或她的Facebook电子邮件,如果用户有一个用户名(即[email protected])。

+7

我刚刚确认了这个问题。即使在明确要求用户电子邮件之后,Facebook也不会将此信息提供给您的应用程序,直到用户确认他的电子邮件。谢谢您的回答。我追了很久。 –

+1

欢迎您,如果只有@BenjaminNaïm会将我的答案标记为正确...... :) – ozba

+0

未经确认的电子邮件也会阻止Facebook上的图像回复? –

2

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

电子邮件:含有效RFC822电子邮件地址字符串 - 注意:这 领域可能,如果为空不电子邮件地址是供用户

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

1

的Facebook w ^虐待提供给你一个用户的电子邮件ID,当且仅当该用户有一个确认的电子邮件ID与他的帐户相关联。如果您的应用可以为某些用户检索电子邮件ID,则开发人员可能无法解决问题。

0

你可以尝试这个工作 String email = user.getProperty(“email”)。toString(); 字符串safeEmail = user.asMap()。get(“email”)。toString();

2

您必须提供电子邮件许可以及授权按钮。

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

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

一些可能的原因:

  • 的帐户没有电子邮件地址(仅限电话号码)
  • 用户进入这需要他们重新确认自己的电子邮件安全检查帐户没有确认的电子邮件地址地址,他们还没有这样做,所以用户的电子邮件地址无法访问。

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

8

我有同样的问题。这是在我的本地工作正常,我使用Facebook登录PHP SDK,当我提出我的要求是全部归还,如电子邮件领域,用户名等,但在服务器上不知它是不是working.It不会返回用户的电子邮件。 我已经做了很多上的R & d和我对这个问题的解决方案。 :)

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

如果你正在使用PHP-SDK只是传递领域这样它返回的电子邮件,FIRST_NAME等 希望它能为你工作的所有。 谢谢。

+1

谢谢,这对我有帮助。 –

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

您需要从facebook的多一个许可。

包括(about_me)权限facebook的开发环境,并在您的应用程序或代码..

1

按照documentation

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

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

+0

我有一个主要的电子邮件帐户,它已验证,但它不是来 – Swati

0

我看了以前的答复,但尽管他们中的一些真实的一样,如果用户没有电子邮件确认,但手机号码,很多时候这个错误发生忽视了如何使用FB图形API请求信息。比方说,你的登录已经成功完成,你现在有一个访问令牌和用户ID等,但仍不能看到电子邮件和其他领域你有兴趣来吧使用确认登录状态后,这个请求作为连接:

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

取决于你的要求,你现在可以根据自己的需要追赶的进一步信息的权限。

2

所有你需要知道:

1)Link 1

一些可能的原因:

的帐户没有电子邮件地址

没有证实,对帐户的电子邮件地址

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

用户进入这需要他们重新确认他们的电子邮件地址的安全检查站,他们还没有这样做

  • 用户的电子邮件地址是不可达

  • 您还需要“电子邮件”扩展权限,即使对于在文件中有 有效的,确认的,可到达的电子邮件地址的用户也是如此。

2)Link 2

注意,即使你要求它不能保证 电子邮件的权限,你会得到一个电子邮件地址。例如,如果某人使用电话号码(而不是电子邮件地址)注册了 Facebook,则电子邮件地址 可能为空。

相关问题