我的应用程序使用带有OAuth令牌的“https://graph.facebook.com/me”请求来获取有关用户的属性。电子邮件地址是我们需要的属性之一,当我们请求访问时,我们会明确请求权限。
它在99%的时间内都能正常工作,但有时会在名为“email”的jSON数据中没有任何对象的情况下返回响应。
是否有可能发生这种情况的解释,例如用户可以授予我们权限但仍然阻止其电子邮件地址的方式?或者可以在另一把钥匙下找到它?
感谢。
答案 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个地址)。我们无法重现这样的星座,因为通常不可能没有主要的电子邮件地址。
任何人都可以确认类似的东西吗?