Facebook Graph API无法正常返回ID与邮箱问题求助(2018/06/01)
排查Facebook Graph API
/me/taggable_friends 返回异常的问题 我来帮你拆解这个问题,核心原因主要是这个API端点的设计限制和权限逻辑,咱们一步步来看:
1. 关于返回的ID不是真实用户ID的问题
/me/taggable_friends这个端点从设计上就不会返回朋友的真实Facebook用户ID,它返回的是专门用于内容标记的临时ID(taggable_friend_id)。这个ID的唯一作用就是让你在应用内发布内容时标记对应的朋友,不能用来调用其他API或者关联用户的真实数据。
如果你的需求是获取朋友的真实用户ID,那这个端点不适用,你需要改用/me/friends,但注意:
- 这个端点仅会返回已经授权使用你的应用的朋友
- 你需要申请
user_friends权限,而且这个权限现在需要经过Facebook的审核,仅允许特定场景使用(比如游戏好友排行榜这类)
2. 关于email字段无法返回的问题
别浪费时间尝试获取朋友的email了——Facebook的隐私政策不允许通过任何API端点获取非授权用户的email,哪怕你申请了email权限,这个权限也仅能获取当前授权用户(也就是/me对应的用户)的email,完全无法获取朋友的email信息。所以你在请求里加email字段是无效的,永远不会返回数据。
3. 额外的权限和版本注意事项
- 你提到的
publish_actions权限在v2.11版本已经被弃用了,现在对应的是publish_pages(针对主页发布)或publish_video等更细分的权限,如果你的应用需要发布内容,得更新权限配置。 user_hometown、user_religion_politics这些权限是用于获取当前授权用户自己的信息,和朋友数据无关,对taggable_friends的返回结果没有影响。
4. 验证当前请求的正确姿势
如果你的需求只是标记朋友到内容里,那正确的请求应该只请求id(临时标记ID)和name,而且要注意读取返回的data数组:
FB.api("/me/taggable_friends?fields=id,name&limit=100", function(response){ if(response && !response.error){ // 要遍历response.data数组,而不是直接打印整个response response.data.forEach(friend => { console.log("可标记ID:", friend.id, "姓名:", friend.name); }); } else { console.error("请求错误:", response.error); } });
如果你的name也没正常显示,建议检查:
- 应用是否已经通过Facebook的应用审核(如果是上线状态)
- 当前用户的登录状态是否有效,有没有正确授权必要的权限(
taggable_friends不需要额外权限,但用户得登录你的应用)
内容的提问来源于stack exchange,提问作者Fahmi Febriandri S R
相关产品推荐
相关产品推荐

