当前能否通过Messenger/Facebook SDK获取好友列表?请求报错咨询
获取Facebook好友列表的现状及你的问题排查方案
一、当前能不能通过Messenger或Facebook SDK拿到好友列表?
先给你明确说下:现在Facebook的权限卡得非常严,普通应用根本拿不到用户的完整好友列表,只有满足特定场景的应用才能拿到相关数据:
- taggable_friends接口:这个接口返回的是用户可以在帖子、评论里@的好友,但注意——它不会返回好友的真实ID,只有用于标记的临时token,而且必须先通过Facebook的审核,得证明你的应用确实有标记好友的合理需求(比如内容分享时@好友),不然根本用不了。
- Messenger相关:如果是做Messenger应用,只能获取同样在使用你的Messenger应用的好友,得用
/me/messenger_friends接口,同样要申请对应权限并通过审核。 - 以前的
/me/friends接口现在基本废了,只能返回同时使用你的应用的好友,而且user_friends权限现在审核极严,一般只有游戏类应用能通过。
二、调用/me/taggable_friends返回200但好友列表为null的原因及解决办法
你遇到的这个返回200状态码但列表为空的问题,我之前帮不少开发者排查过,常见原因有这几个:
- 权限没搞定是重灾区
- 首先确认你的应用已经申请并通过了
taggable_friends权限的审核!这个权限不是默认开放的,必须在Facebook开发者后台提交审核申请,详细说明你要用这个权限做什么,审核不通过的话,哪怕调用接口返回200,也拿不到数据。 - 再检查当前用户的AccessToken有没有包含
taggable_friends权限,你可以调用/me/permissions接口看看已授权的权限列表,要是没这个权限,赶紧引导用户重新授权。
- 首先确认你的应用已经申请并通过了
- 用户那边的特殊情况
- 虽然少见,但如果用户的好友都设置了严格的隐私权限(禁止被其他应用标记),或者用户根本没几个活跃好友,确实可能返回空列表。建议换个有正常好友关系的测试账号试试,排除这个可能。
- API调用参数漏了
- 你有没有指定返回的字段?如果只调用
/me/taggable_friends不指定fields,可能返回的数据结构里没有你要的列表字段,看起来就像null。试试加上字段参数:new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/taggable_friends?fields=id,name,picture", null, HttpMethod.GET, new GraphRequest.Callback() { @Override public void onCompleted(GraphResponse response) { // 处理响应逻辑 } }).executeAsync();
- 你有没有指定返回的字段?如果只调用
- SDK版本太旧
- 看看你用的Facebook SDK是不是最新版本,旧版本可能和Facebook的API有兼容性问题,导致返回异常。建议升级到最新版再试试。
- 用户隐私设置限制
- 让用户检查下自己的Facebook隐私设置:打开设置 > 隐私 > 应用和网站 > 找到你的应用,确认对应的权限是不是开启了,要是用户手动关掉了,你也拿不到数据。
最后总结下
现在想拿到Facebook好友列表的门槛真的很高,必须严格符合Facebook的政策,还得通过审核。针对你的问题,优先去查权限审核状态和AccessToken的权限,再检查调用参数,大概率能解决问题。
内容的提问来源于stack exchange,提问作者user8978550
相关产品推荐
相关产品推荐

