如何使用Android Studio和Facebook SDK 4.4获取一个人的完整好友列表。+。我到处寻找教程,但它们都过时了。我只需要一个简单的代码而无需安装任何新库,我需要更多解释代码
答案 0 :(得分:1)
直接来自Facebook API文档 - https://developers.facebook.com/docs/graph-api/reference/v2.4/user/friends
这只会返回任何使用(通过Facebook登录)应用程序的朋友发出请求。 如果该人的朋友拒绝了user_friends权限,该朋友将不会出现在此人的朋友列表中。
这是Facebook API在我们对所有应用强制执行v2时对我们所做的事情。
感谢Facebook。
答案 1 :(得分:0)
这听起来像你吗?那么你找到了正确的问题! 你需要做什么才能实现"朋友获得"是Facebook Graph API。 Facebook对如何使用他们的Graph API +有很好的解释,你可以使用他们的Graph Explorer来测试它。
但您可能需要更多帮助吗?好吧,我可以把它给你。
首先正确整合您的Facebook SDK并添加登录按钮,以便此人可以登录。 从现在开始是Graph API。我建议您在阅读本答案后阅读Graph API文档和权限列表,以便更好地理解这个神奇的工具。
很多人说,经过一段时间的更新后,你无法得到一个完整的朋友列表。那么他们是部分正确的。 Facebook确实改变了某些命令的行为方式,但其他命令仍在您的位置上。例如/ taggable_friends可标记的朋友会给你一系列名字,这些名字都是你的朋友,他们没有把他们的个人资料私有化。例如,我有409个朋友,但是此功能仅向我显示406人,因为3个人拥有私人帐户。
如何使用taggable_friends? 在登录代码中添加:
GraphRequest requestet =
new GraphRequest(
accessToken,
"/me/friends",
null,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
JSONObject obj = response.getJSONObject();
JSONObject sum;
try {
sum = obj.getJSONObject("summary");
c=Integer.valueOf(sum.optString("total_count"));
fff.setText(sum.optString("total_count"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}
);
GraphRequest requestt =
new GraphRequest(
accessToken,
"/me/taggable_friends",
null,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
JSONObject obj = response.getJSONObject();
JSONArray arr;
try {
arr = obj.getJSONArray("data");
JSONObject oneByOne = arr.getJSONObject(1);
lmaYOLO.setText(Integer.toString(c)+" "+oneByOne.opt("name").toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
}
);
Bundle parameters = new Bundle();
parameters.putString("fields", "name");
requestet.executeAsync();
request.setParameters(parameters);
request.executeAsync();
requestt.setParameters(parameters);
requestt.executeAsync();
我们使用的第一个图形请求是" requestet"我在那里做的是使用朋友节点获取登录用户的朋友数量。
为了访问任何节点,您需要使用JSONObject objname = previousobject.getJSONObject("节点名称") 使用objname,previousobject和节点名称可根据需要进行更改。
使用taggable_friends会更加棘手,因为你会得到一个对象数组,每个对象都包含一个朋友的名字。所以你可以在代码中看到我如何获得与Object相同的Array。现在在JSONObject oneByOne = arr.getJSONObject(1),一个可以转换为任意数量的朋友列表(REMEMBER数组从0开始,所以第一个元素将是getJSONObject(0))。
现在从这里你可以创建一个while循环,它将从0变为我们从/ me / friends获得的数字
您可能已经注意到,当我使用setText时,我使用oneByOne.opt(" name")。选项的作用是获取该节点的值(在我们的例子中是朋友的名字),而不像打开节点的getJSONObject。
启动此程序,我将在屏幕上看到:
406 - 非私人朋友的数量 Biggus Dickus - 我的Facebook列表中的第二个朋友(当然不是你真实的第二个朋友)。
Changin它给我我的第一个朋友(记住你必须把0), 我会得到 407(哦,我接受了新朋友的要求) 马丁路德金
从这里开始,您可以使用此代码执行任何操作!有基金
答案 2 :(得分:0)
你无法获取整个朋友列表。只有那些也在使用你的应用程序。
请参阅: