Facebook 'Friends.getAppUsers' с использованием Graph API
У меня есть приложение, которое использует старый вызов API REST Friends.getAppUsers
, чтобы получить список друзей для текущего пользователя, который разрешил мое приложение.
Я прочитал документацию, как мне это сделать с помощью Graph API? Каким будет пример этого?
Ответы
Ответ 1
Я провел много исследований по этому вопросу. Из того, что я могу сказать, нет способа сделать Friends.getAppUsers
с помощью Graph API. Последние SDK, предоставленные Facebook, используют старый REST API для поиска друзей с помощью приложения.
Ответ 2
Я искал вокруг какое-то время, и я тоже думал, что это невозможно с помощью Graph API.
Тем не менее, я опубликовал аналогичный вопрос, Замена для старого вызова GetAppUsers, чтобы увидеть друзей пользователей, которые используют мое приложение?, для конкретного API, который я использовал, и был учитывая большой общий ответ.
https://graph.facebook.com/me/friends?fields=installed
или в целом
https://graph.facebook.com/{user id}/friends?fields=installed
Это возвращает всех друзей, с дополнительным полем "installed = true" для тех друзей, которые используют приложение.
Здесь он работает в Graph API Explorer:
Ответ 3
Это можно сделать с помощью FQL.
SELECT uid FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ?)
AND is_app_user = 1
QED!
Ответ 4
Да, API-интерфейс Graphor документально зафиксирован. Я не вижу никакой документации для "приложения" type, но они ссылаются на информацию о приложении в документах:
https://graph.facebook.com/2439131959
Итак, возможно, вы можете получить члены приложения, используя синтаксис группы?
https://graph.facebook.com/2439131959/members
Для тестирования вам понадобится аутентифицированный сеанс. В противном случае, похоже, что Facebook подталкивает нас к использованию FQL для прямой отправки запросов:
http://developers.facebook.com/docs/reference/fql/application
Вы можете выполнять запросы FQL выборка https://api.facebook.com/method/fql.query?query=QUERY. Вы можете указать формат ответа как либо XML, либо JSON с форматом параметр запроса.
Итак, вы можете передать запрос FQL, чтобы получить информацию о вашем приложении.
Ответ 5
Старый API REST:
$facebook->api_client->friends_getAppUsers();
Новый графический API:
$facebook->api(array('method' => 'friends.getAppUsers'));
Ответ 6
Используя restFB, я сделал следующее (спасибо Igy/Alex за руководство). Обратите внимание, что Facebook возвращает массив идентификаторов друзей с "установленным" = истинным, если пользователь установлен (как можно видеть здесь).
Сначала расширьте класс User, добавив поле installed
:
import com.restfb.Facebook;
import com.restfb.types.User;
public class InstalledUser extends User {
@Facebook
private boolean installed;
public InstalledUser() {
}
public boolean getInsatlled() {
return installed;
}
}
Далее, используя DefaultFacebookClient:
FacebookClient facebook = new DefaultFacebookClient(pFacebookAccessToken);
Connection<InstalledUser> installedFacebookUsers = facebook.fetchConnection("/" + pFacebookId + "/friends", InstalledUser.class, Parameter.with("fields", "installed"));
for (List<InstalledUser> friends : installedFacebookUsers) {
for (InstalledUser friend : friends) {
if (friend.getInsatlled()) {
// Add friend.getId() to a list of ID, or whatever
}
}
}
Ответ 7
Обходной путь - это сделать фильтрацию самостоятельно. Предположительно, у вас есть все uid пользователей, которые зарегистрировались для вашего приложения, сидящего в вашей собственной базе данных. Итак, сначала получите всех друзей друзей друзей и выберите пользователей из вашей базы данных, у которых есть соответствующие uids.
Новая программа API Facebook Graph выглядит очень плохо выполненной и не совсем продумана. Кажется, они бросились публиковать его для Facebook f8 до того, как он был зрелым, и много функций отсутствует, что было доступно раньше.
Ответ 8
Вы все равно можете вызвать старый API REST в новом графическом API. Это действительно допустимо.
Альтернативный способ - использовать FQL, чтобы получить друзей пользователя приложения.
Я не уверен, есть ли способ сделать это, используя только Graph API.