Замена старых 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.