Facebook API中间歇性丢失的电子邮件地址

时间:2011-09-29 21:33:02

标签: facebook email

我的应用程序使用带有OAuth令牌的“https://graph.facebook.com/me”请求来获取有关用户的属性。电子邮件地址是我们需要的属性之一,当我们请求访问时,我们会明确请求权限。

它在99%的时间内都能正常工作,但有时会在名为“email”的jSON数据中没有任何对象的情况下返回响应。

是否有可能发生这种情况的解释,例如用户可以授予我们权限但仍然阻止其电子邮件地址的方式?或者可以在另一把钥匙下找到它?

感谢。

6 个答案:

答案 0 :(得分:11)

简短回答:并非所有用户都有可用的电子邮件地址,而且那些用户可能没有有效的,可访问的电子邮件地址

email对象user字段的文档(https://developers.facebook.com/docs/reference/api/user/)阐明了此处的预期行为,即: "如果没有有效的电子邮件地址,则不会返回此字段"

在许多情况下,您可能认为用户应该返回一个电子邮件地址,但他们不会。一些常见原因:

  • 帐户中没有电子邮件地址
  • 帐户
  • 未确认,经过验证的电子邮件地址
  • 用户输入了一个安全检查点,要求他们重新确认他们的电子邮件地址,但他们还没有这样做
  • 用户的电子邮件地址无法访问

您还需要email扩展权限(用户可以选择不允许),即使对于拥有有效,已确认,可访问的电子邮件地址的用户也是如此。

答案 1 :(得分:8)

http://touch.facebook.com/r.php处的移动注册表单允许您使用电子邮件地址或电话号码进行注册。所以我不认为所有Facebook用户都有一个存储在他们身上的电子邮件地址。

答案 2 :(得分:3)

用户可以撤消应用隐私设置页面上的电子邮件地址权限,而无需撤消整个应用程序。您可以先调用/ me / permissions以确保仍然授予电子邮件权限。

答案 3 :(得分:3)

如果您使用的是facebook SDK 2.4或更高版本,则需要在策略中添加“字段”

以下是oAuth library的示例。

  

FacebookStrategy.php第131行

     

在:

$me = $this->serverGet('https://graph.facebook.com/me', array('access_token' => $access_token), null, $headers);
     

在:

$me = $this->serverGet('https://graph.facebook.com/me', array('access_token' => $access_token,'fields'=>'email,name,first_name,last_name,age_range,gender'), null, $headers);

无论字段列表如何,如果您想获得Facebook默认提供的更多信息,则权限需要位于“范围”数组中。

SDK提供的默认数据包括:email,public profile,user_friends

答案 4 :(得分:2)

如果用户未通过点击激活消息中的链接确认其主要地址,则会丢失电子邮件字段。

答案 5 :(得分:1)

遇到同样的问题并发现在极少数情况下发生这种情况时,用户没有定义主电子邮件地址(尽管注册了2个地址)。我们无法重现这样的星座,因为通常不可能没有主要的电子邮件地址。

任何人都可以确认类似的东西吗?