调用Facebook API获取friends接口返回data字段为空的排查咨询
me/friends 返回data为空的方法 我之前也碰到过类似的情况,当时折腾了好一阵才找到原因,给你列几个靠谱的排查方向:
确认权限与好友授权状态
Facebook的user_friends权限现在只能返回同样授权过你这款应用的好友,不是你账号里的所有好友。哪怕你有5位好友,要是他们都没用过你的应用,data字段自然是空的,只有summary里的总数是对的。你可以先找一个好友让他授权你的应用,再调用接口试试。另外,要确保你在登录时确实请求了user_friends权限,检查登录代码里的权限列表有没有包含这个权限。显式指定要返回的字段
现在Graph API默认不会返回好友的详细字段(比如id、name),你需要在请求里显式声明。把你的查询改成:FB.API("me/friends?fields=id,name", HttpMethod.GET, callback);试试这样会不会返回data内容,很多时候就是因为没指定字段导致的。
检查应用的模式状态
如果你的应用还处于开发模式,只有添加到应用测试名单里的用户(包括开发者、测试用户)的好友关系才会被返回。普通用户即使授权了应用,也看不到非测试名单里的好友。你可以去Facebook开发者后台看看应用的模式,或者添加几个测试用户互相加好友,用测试账号调用接口验证。确认API版本是否兼容
不同版本的Graph API对me/friends的返回逻辑有变化,比如有些旧版本可能默认返回data,但新版本需要显式字段。你可以在请求里指定一个稳定的版本,比如:FB.API("v18.0/me/friends?fields=id,name", HttpMethod.GET, callback);避免使用未指定版本的请求,防止因为版本兼容问题导致数据不返回。
检查权限审核状态
如果你的应用已经上线(公开模式),user_friends权限需要通过Facebook的审核才能对普通用户生效。如果审核没通过,只有测试用户能正常获取好友数据,普通用户调用时data会是空的。你可以去开发者后台的“权限与功能”页面查看审核状态。用测试账号隔离问题
有时候真实账号的好友关系比较复杂,你可以在Facebook开发者后台创建几个测试用户,让他们互相加好友,然后用测试用户登录你的应用并授权,调用me/friends接口。如果测试账号能正常返回data,那问题大概率出在真实账号的好友授权或者应用权限审核上;如果测试账号也不行,那就要检查你的代码或者应用配置了。
内容的提问来源于stack exchange,提问作者yrslvrtfmv




