在我的Android应用程序中,我想显示Facebook好友列表及其信息。 为了检索朋友的数据,我使用了以下代码: -
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
Log.i(TAG, "Logged in...");
Request friendRequest = Request.newMyFriendsRequest(session,
new GraphUserListCallback(){
@Override
public void onCompleted(List<GraphUser> users,
Response response) {
Log.i("INFO", response.toString());
GraphObject graphObject = response.getGraphObject();
if (graphObject != null) {
JSONObject jsonObject = graphObject.getInnerJSONObject();
try {
JSONArray array = jsonObject.getJSONArray("data");
//code to store data
} catch (JSONException e) {
e.printStackTrace();
}
}
}
});
Bundle params = new Bundle();
params.putString("fields", "id, name , picture");
friendRequest.setParameters(params);
friendRequest.executeAsync();
} else if (state.isClosed()) {
Log.i(TAG, "Logged out...");
}
}
但是当我按照代码中的这一行运行代码并打印日志消息时: -
Log.i("INFO", response.toString());
我收到了以下日志消息: -
INFO: {Response: responseCode: 200, graphObject: GraphObject{graphObjectClass=GraphObject, state={"data":[],"summary":{"total_count":1029}}}, error: null, isFromCache:false}
指出正确的Facebook朋友&#34; 1029&#34;但实际数据为空&#34;数据&#34;:[]。 如何检索正确的数据? 请指正。
EDIT1
现在确认我们只能得到安装了相同app的朋友列表。我使用了与上面提到的相同的代码,只有一行变更: -
params.putString("fields", "id, name , birthday");
我也想访问朋友生日。我将所有必要的权限设置如下
"read_friendlists","friends_birthday","read_stream", "offline_access"
但响应只包含id和name但不包含生日。
请建议需要。
请提供解决方案。
答案 0 :(得分:4)
https://developers.facebook.com/docs/apps/changelog
2014年4月30日之后创建的应用只能获得授权您的应用的朋友。在该日期之前创建的应用将在2015年4月之后升级到v2.0。
有一个非常详细的答案,涵盖了您在此主题中需要了解的所有内容:https://stackoverflow.com/a/23417628/757508
答案 1 :(得分:2)
不幸的是,自2014年3月左右以来,facebook sdk将朋友列表限制为安装了您的应用的朋友。所以基本上如果没有用户安装你的应用程序,它会返回朋友列表null。