Замена старого вызова GetAppUsers, чтобы увидеть друзей пользователя, которые используют мое приложение? - PullRequest
10 голосов
/ 31 октября 2011

Один очень полезный вызов в старом API REST - Friends.getAppUsers.Этот звонок возвращает всех ваших друзей, которые используют приложение.К сожалению, это не в Open Graph API.Об этом есть хорошее сообщение о переполнении стека: Facebook 'Friends.getAppUsers' с использованием Graph API .

Однако для создания графика можно использовать API API. FQL вызовы, которые можно увидеть здесь в проводнике API Graph .

Я подумал, что, возможно, я мог бы сделать следующий вызов, используя C # 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, используя существующий C # SDK?

Ответы [ 2 ]

30 голосов
/ 31 октября 2011

вызов 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}"
     }

// СНИП

Вы можете использовать наличие или отсутствие installed:true, чтобы определить, кто из друзей пользователя использует ваше приложение.

Если это по какой-то причине не работает для вас; у вас уже нет списка пользователей вашего приложения в вашей собственной базе данных? Вы можете просто получить полный список друзей пользователя и сравнить его с собственными записями о том, кто использует ваше приложение.

0 голосов
/ 01 ноября 2011

Есть проблема с вашим путем.

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.

...