2012-04-17 4 views
6

Я использую Android Android SDK. Есть ли простой способ получить друзей пользователя, загрузивших приложение? Например, приложение Draw Something реализует это. Кажется, я не могу найти информацию по этому вопросуAndroid получить друзей Facebook, которые загрузили приложение

Я бы предположил, что если бы это было возможно, в httppost для доступа к этой информации понадобилась дополнительная информация.

+0

эй , я тоже хочу список друзей в списке. Я использовал метод запросов facebook, как в первой части ответа JPMagalhaes ниже. Но я не знаю, как использовать результат. Я имею в виду, как получить результат в списке. что я должен делать с List пользователями. u можете ответить на него здесь: http: // stackoverflow.com/questions/26773639/working-with-facebook-sdk –

ответ

54

* Примечание: с версии 3.14 меня/друзей вернут только друзей, которые также используют приложение, поэтому ниже реализация устарела. См. Новые API-интерфейсы «Invitable Friends» или «Taggable Friends» для альтернатив.

Использование нового Facebook SDK для Android (3.0) очень легко получить список друзей пользователя. Ниже приводится код:

private void requestFacebookFriends(Session session) { 
    Request.executeMyFriendsRequestAsync(session, 
      new Request.GraphUserListCallback() { 
       @Override 
       public void onCompleted(List<GraphUser> users, 
         Response response) { 
        // TODO: your code for friends here! 
       } 
      }); 
} 

Тем не менее, для того, чтобы получить друзей пользователя, которые используют приложение Facebook будет немного сложно (из документации API Facebook). Но есть, возможно.

Прежде всего, создайте запрос:

private Request createRequest(Session session) { 
    Request request = Request.newGraphPathRequest(session, "me/friends", null); 

    Set<String> fields = new HashSet<String>(); 
    String[] requiredFields = new String[] { "id", "name", "picture", 
      "installed" }; 
    fields.addAll(Arrays.asList(requiredFields)); 

    Bundle parameters = request.getParameters(); 
    parameters.putString("fields", TextUtils.join(",", fields)); 
    request.setParameters(parameters); 

    return request; 
} 

Обратите внимание, что вам нужно, чтобы вставить поле «установлен» в запросе. Я запрашиваю путь изображения пользователя с тем же запросом. Проверьте свои возможности here.

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

private void requestMyAppFacebookFriends(Session session) { 
    Request friendsRequest = createRequest(session); 
    friendsRequest.setCallback(new Request.Callback() { 

     @Override 
     public void onCompleted(Response response) { 
      List<GraphUser> friends = getResults(response); 
      // TODO: your code here 
     } 
    }); 
    friendsRequest.executeAsync(); 
} 

Обратите внимание, что с помощью этого универсального запроса, вы не получите список GraphUser в качестве ответа. Вам понадобится следующий код, чтобы получить ответ в виде списка GraphUser:

private List<GraphUser> getResults(Response response) { 
    GraphMultiResult multiResult = response 
      .getGraphObjectAs(GraphMultiResult.class); 
    GraphObjectList<GraphObject> data = multiResult.getData(); 
    return data.castToListOf(GraphUser.class); 
} 

Теперь вы можете использовать список друзей вашего пользователя, с информацией, если каждый из ваших друзей использовать приложение Facebook:

GraphUser user = friends.get(0); 
boolean installed = false; 
if(user.getProperty("installed") != null) 
    installed = (Boolean) user.getProperty("installed"); 
+7

+1 для полноты и правильности. Это лучший ответ –

+2

+1 за полноту и правильность, я не могу сказать это лучше, чем @BlakeMiller. – VansFannel

+0

Как работает «установленное» свойство? Включает ли это пользователей, предоставивших разрешения на чтение для приложения? –

1

Я надеюсь, что этот пост поможет вам: How can i get my friends using my facebook App with graph api asp.net

Согласно Facebook SDK, то has_added_app поле является устаревшим, и вы должны использовать is_app_user

+0

Спасибо за дополнительную информацию, так что нет способа сделать звонок в facebook graph api, чтобы получить пользователей, которые используют приложение? –

+0

Как я нашел, вы можете выполнить запрос FQL для сбора этой информации: SELECT uid FROM user WHERE is_app_user = 1 и uid IN (SELECT uid2 FROM friend WHERE uid1 = {USERS'S FB ID}) –

2

Я реализовал это таким образом

Bundle params = new Bundle(); 

params.putString("fields", "name, picture, location, installed"); 

И во время отображения элементов в списке, в методе getView() я сделал это

boolean b = jsonObject.getBoolean("installed"); 

if (b){ 
    Log.d("VIVEK",jsonObject.getString("name")); 
} 
Смежные вопросы