Замена старых GetAppUsers позволяет видеть пользователей, которые используют мое приложение?
Одним из очень полезных вызовов в старом REST API является Friends.getAppUsers
. Этот вызов возвращает всех ваших друзей, которые используют приложение. К сожалению, это не в Open Graph API. Существует хорошая статья о переполнении стека, Facebook 'Friends.getAppUsers', используя Graph API.
Однако, можно использовать Graph API, чтобы сделать FQL, как это можно увидеть здесь, в Graph API explorer.
Я подумал, что, возможно, я мог бы сделать следующий вызов, используя С# SDK:
fb.GetAsync("fql/?q=SELECT uid,username, is_app_user FROM user WHERE uid IN(SELECT uid2 FROM friend WHERE uid1 = me()) AND is_app_user=1");
Однако это привело к ошибке. Есть ли способ обойти отсутствие вызова GetAppUsers
с использованием существующего С# SDK?
Ответы
Ответ 1
Замена API-вызова для users.isAppUser - это простой вызов /me/?fields=installed
Это также работает для друзей пользователя, поэтому, добавив в него замену для friends.getAppUsers
.
Я пробовал это как с токеном доступа к приложениям, так и с обычным токеном доступа.
Сделайте вызов API /{user id}/friends?fields=installed
- Возврат выглядит следующим образом:
{
"data": [
{
"id": "{FRIEND_UID_1}"
},
{
"id": "{FRIEND_UID_2}"
},
// etc...
{
"installed": true,
"id": "{FRIEND_UID_X}"
}
//СНИП
Вы можете использовать присутствие или отсутствие therof для installed:true
, чтобы определить, какие из друзей пользователя используют ваше приложение.
Если это почему-то не работает для вас; разве у вас уже нет списка пользователей вашего приложения в вашей собственной базе данных? Вы можете просто получить полный список друзей пользователя и сравнить его с вашими собственными записями о том, кто использует ваше приложение.
Ответ 2
Проблема с вашим путем.
uid1 = me()) AND is_app_user=1
= неправильно кодируется URL. Замените =
на %3d
.
uid1 %3d me()) AND is_app_user%3d1
Это может показаться уродливым. Поэтому лучший способ - использовать метод Query
/QueryAsync
:
fb.QueryAsync("SELECT uid,username, is_app_user FROM user WHERE uid IN(SELECT uid2 FROM friend WHERE uid1 = me()) AND is_app_user=1");
Если вы используете v5.2.1 или ранее, Query
будет использовать устаревший API REST. Если вы используете версию позже версии v5.3.1, она будет использовать API-интерфейс Graph для выполнения запроса FQL.