Facebook无法获取登录用户全部照片,返回200但data为空
解决Facebook Graph API获取用户照片返回空数组的问题
我帮你梳理下这个问题的核心原因和解决办法,你遇到的200响应但无数据的情况,大概率是权限和请求参数的搭配出了问题:
1. 混淆了「权限」和「请求字段」
你在Bundle里填的user_photos是需要提前申请的权限,不是Graph API要获取的字段!Graph Request的fields参数应该指定你要拉取的照片相关具体字段,比如id, picture, name这类,而权限得在用户登录你的应用时就提前请求好。
2. 权限版本适配问题
如果你的应用用的是Graph API v2.4及以上版本,原有的user_photos权限已经被拆分:
photos.user:用于获取用户自己上传的照片photos.friends:获取好友照片(现在这个权限基本被严格限制,仅特定场景可用)
要确保你在用户登录流程中请求了正确的权限,并且如果是上线应用,这些权限已经通过Facebook的审核。
3. 修正后的代码示例
这里给你调整好的代码,你可以直接参考:
// 前提:用户登录时已成功请求photos.user权限 Bundle bundle = new Bundle(); // 指定需要获取的照片字段,按需添加 bundle.putString("fields", "id,name,picture"); String userId = com.facebook.Profile.getCurrentProfile().getId(); new GraphRequest( AccessToken.getCurrentAccessToken(), "/" + userId + "/photos", bundle, HttpMethod.GET, new GraphRequest.Callback() { public void onCompleted(GraphResponse response) { try { if (response.getError() == null) { JSONArray photoArray = response.getJSONObject().getJSONArray("data"); Log.d("FBPhotos", "获取到照片数量:" + photoArray.length()); // 遍历处理每一张照片 for (int i = 0; i < photoArray.length(); i++) { JSONObject photo = photoArray.getJSONObject(i); Log.d("FBPhotos", "照片ID:" + photo.getString("id")); } } else { Log.e("FBPhotos", "请求错误:" + response.getError().getErrorMessage()); } } catch (JSONException e) { e.printStackTrace(); } } } ).executeAsync();
4. 额外检查项
- 确认测试用的Facebook账号确实有上传过照片,别用空相册的账号测试
- 检查当前
AccessToken是否包含目标权限:可以通过AccessToken.getCurrentAccessToken().getPermissions()打印权限列表确认 - 如果是测试应用,确保测试账号已经被添加到Facebook开发者后台的「测试人员」列表中,否则部分权限无法正常生效
内容的提问来源于stack exchange,提问作者Rajendra Prasad
相关产品推荐
相关产品推荐

