2012-04-17 11 views
6

Estoy usando Facebook Android SDK. ¿Hay alguna manera fácil de obtener los amigos de un usuario que han descargado la aplicación? Por ejemplo, la aplicación Draw Something implementa esto. Parece que no puedo encontrar ninguna información sobre este temaAndroid recibe amigos de Facebook que han descargado la aplicación

Supongo que si fuera posible, se necesitaría información adicional en el httppost para acceder a esta información.

+0

bueno , yo también quiero una lista de amigos en una lista. He utilizado el método de solicitud de amigos de Facebook como en la primera parte de la respuesta de JPMagalhaes a continuación. Pero no sé cómo tener el resultado. Me refiero a cómo obtener el resultado en una vista de lista. lo que se supone que debo hacer con los usuarios de List . Puedes responderlo aquí: http: // stackoverflow.com/questions/26773639/working-with-facebook-sdk –

Respuesta

54

* Nota: desde la versión 3.14, me/friends solo devolverá amigos que también usen la aplicación, por lo que la implementación a continuación está obsoleta. Consulte las nuevas API de "Amigos Invitables" o "Amigos que se pueden etiquetar" para conocer las alternativas.

Usando el nuevo Facebook SDK para Android (3.0) es muy fácil conseguir la lista de amigos de su usuario. A continuación se presenta el código:

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! 
       } 
      }); 
} 

Sin embargo, con el fin de conseguir los amigos del usuario que está utilizando su aplicación de Facebook se complica un poco (debido a la documentación de la API de Facebook). Pero sí, es posible.

En primer lugar, crear su solicitud:

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; 
} 

Tenga en cuenta que es necesario insertar el campo "instalado" en su solicitud. Estoy solicitando la ruta de la imagen del usuario con la misma solicitud. Verifique sus posibilidades here.

A continuación, se puede utilizar por encima de código para crear su solicitud y luego haz que tus amigos:

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(); 
} 

Tenga en cuenta que el uso de esta solicitud genérica, no recibe una lista GraphUser como respuesta. Usted necesitará siguiente código para obtener la respuesta lista GraphUser:

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

Ahora usted puede utilizar su lista de amigos del usuario, con la información si cada uno de sus amigos usan su aplicación de Facebook:

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

+1 para completar y corregir. Esta es la mejor respuesta –

+2

+1 para completar y corregir, no puedo decirlo mejor que @BlakeMiller. – VansFannel

+0

¿Cómo funciona la propiedad "instalado"? ¿Eso incluye a los usuarios que otorgaron permisos de lectura a la aplicación? –

1

espero que este post le ayuda a: How can i get my friends using my facebook App with graph api asp.net

De acuerdo con la Facebook SDK, el campo has_added_app es obsoleto y debería usar el is_app_user

+0

Gracias por la información adicional, ¿por qué no hay forma de hacer una llamada a la API de Facebook para que los usuarios que usan la aplicación puedan hacerlo? –

+0

Como encontré, puede ejecutar la consulta FQL para recopilar esta información: SELECCIONAR uid FROM usuario WHERE is_app_user = 1 y uid IN (SELECCIONAR uid2 FROM friend DONDE uid1 = {IDENTIFICACIÓN FB DEL USUARIO}) –

2

he implementado de esta manera

Bundle params = new Bundle(); 

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

Y durante la visualización de los elementos en la lista, en el método getView() hice esto

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

if (b){ 
    Log.d("VIVEK",jsonObject.getString("name")); 
} 
Cuestiones relacionadas