Obtener lista de amigos facebook 3.0

Estoy tratando de obtener mi lista de amigos de facebook usando nuevo SDK (3.0). Estoy enfrentando problemas relacionados con qué tipo de parámetros debo insertar en un Bundle y cómo usar newMyFriendRequest y GraphAPI.

No encontré en la documentación de facebook un lugar sobre qué tipo de campo tenemos que usar. Basándome en GraphExplorer , inserto en mi paquete la clave "fields" con esta cadena "id, name, friend" como valor. El siguiente código muestra lo que estoy haciendo ahora mismo. Después de obtener Mi imagen y nombre, ejecuto newMyFriendRequest. Creo que utiliza GraphAPI por defecto.

He visto aquí en StackOverflow algunos posts relacionados:

Cómo enviar una consulta FQL con el nuevo SDK de Android

Facebook Android SDK parámetros de la solicitud: ¿dónde encontrar la documentación?

Me ayuda poco y no quiero usar FQL. Para la respuesta estoy recibiendo este JSON como una respuesta:

{Response: responseCode: 500, graphObject: null, error: {HttpStatus: 500, errorCode: 100, errorType: FacebookApiException, errorMessage: Unsupported operation}, isFromCache:false} 

Tenga en cuenta que soy muy nuevo en Facebook SDK para Android.

 private void onSessionStateChange(final Session session, SessionState sessionState, Exception ex){ if(session != null && session.isOpened()){ getUserData(session); } } private void getUserData(final Session session){ Request request = Request.newMeRequest(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { if(user != null && session == Session.getActiveSession()){ pictureView.setProfileId(user.getId()); userName.setText(user.getName()); getFriends(); } if(response.getError() !=null){ } } }); request.executeAsync(); } private void getFriends(){ Session activeSession = Session.getActiveSession(); if(activeSession.getState().isOpened()){ Request friendRequest = Request.newMyFriendsRequest(activeSession, new GraphUserListCallback(){ @Override public void onCompleted(List<GraphUser> users, Response response) { Log.i("INFO", response.toString()); } }); Bundle params = new Bundle(); params.putString("fields", "id,name,friends"); friendRequest.setParameters(params); friendRequest.executeAsync(); } } 

En el método getFriends (), cambie esta línea:

 params.putString("fields", "id,name,friends"); 

por

 params.putString("fields", "id, name, picture"); 

Uso de la consulta FQL

 String fqlQuery = "SELECT uid,name,pic_square FROM user WHERE uid IN " + "(SELECT uid2 FROM friend WHERE uid1 = me())"; Bundle params = new Bundle(); params.putString("q", fqlQuery); Session session = Session.getActiveSession(); Request request = new Request(session, "/fql", params, HttpMethod.GET, new Request.Callback(){ public void onCompleted(Response response) { Log.i(TAG, "Result: " + response.toString()); try{ GraphObject graphObject = response.getGraphObject(); JSONObject jsonObject = graphObject.getInnerJSONObject(); Log.d("data", jsonObject.toString(0)); JSONArray array = jsonObject.getJSONArray("data"); for(int i=0;i<array.length();i++){ JSONObject friend = array.getJSONObject(i); Log.d("uid",friend.getString("uid")); Log.d("name", friend.getString("name")); Log.d("pic_square",friend.getString("pic_square")); } }catch(JSONException e){ e.printStackTrace(); } } }); Request.executeBatchAsync(request); 

Ref : Ejecutar consultas FQL

Esto debería funcionar:

 // @Deprecated // Request.executeMyFriendsRequestAsync() // Use this instead: Request.newMyFriendsRequest(session, new GraphUserListCallback() { @Override public void onCompleted(List<GraphUser> users, Response response) { if(response.getError() == null) { for (int i = 0; i < users.size(); i++) { Log.e("users", "users " + users.get(i).getName()); } } else { Toast.makeText(MainActivity.this, response.getError().getErrorMessage(), Toast.LENGTH_SHORT).show(); } } }); 

Desafortunadamente Facebook quita esos permisos.

/ Me / friends devuelve los amigos del usuario que también están utilizando tu aplicación.

En v2.0, el punto final API de amigos devuelve la lista de amigos de una persona que también están utilizando tu aplicación. En v1.0, la respuesta incluía a todos los amigos de una persona.

En v1.0, era posible pedir permisos que permitieran a una aplicación ver una cantidad limitada de datos de amigos, como los amigos de una persona, sus cumpleaños, etc.

En v2.0, todos los permisos han sido eliminados. Ya no es posible que una aplicación vea los datos de los amigos de una persona a menos que esos amigos también hayan iniciado sesión en la aplicación y concedido permiso para que la aplicación vea que los datos

https://developers.facebook.com/docs/apps/upgrading#v2_0_friendlist_title

Puedes usar mi código, necesitas usar la biblioteca de Facebook en tu proyecto. Todas las clases usadas para facebook están ahí en ese sdk.

 private void onSessionStateChange(Session session, SessionState state, Exception exception) { if (state.isOpened()) { Log.i(TAG, "Logged in..."); Request.executeMyFriendsRequestAsync(session, new GraphUserListCallback() { @Override public void onCompleted(List<GraphUser> users, Response response) { Log.i("Response JSON", response.toString()); names = new String[users.size()]; id = new String[users.size()]; for (int i=0; i<users.size();i++){ names[i] = users.get(i).getName(); id[i]= users.get(i).getId(); } } }); } else if (state.isClosed()) { Log.i(TAG, "Logged out..."); } } 

Nombres e ids son dos matrices de cadenas y ahora tienen todos los nombres e ids de los amigos. Espero que solucione su problema.

Para la persona preguntar cómo obtein el nombre y el apellido, necesita poner first_name y last_name en lugar de nombre.

 params.putString("fields", "id, first_name, last_name, picture"); 

Utilice el siguiente código para obtener la lista de amigos de Facebook. Se mostrará sólo los datos de los usuarios que se ha hecho Facebook de inicio de sesión con la aplicación, y los usuarios tienen ID de Facebook en la base de datos. Entonces esto mostrará la lista de esos amigos.

FacebookFriendListActivity.java

 package com.application.Activity; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.facebook.HttpMethod; import com.facebook.Request; import com.facebook.RequestBatch; import com.facebook.Response; import com.facebook.Session; import com.facebook.SessionDefaultAudience; import com.facebook.SessionLoginBehavior; import com.facebook.SessionState; import com.facebook.internal.SessionTracker; import com.facebook.internal.Utility; import com.facebook.model.GraphObject; import com.facebook.model.GraphUser; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import Info.InfoUsers; import india.application.upflair.Adapter.FindPeopleAdapter; import india.application.upflair.R; import utills.ConnectionDetector; import utills.Constant; public class FacebookFriendListActivity extends AppCompatActivity { //facebook section SessionTracker mSessionTracker; Session mCurrentSession = null; String facebook_id; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listview); signInWithFacebook(); } /*** * facebook section to get friend list */ private void signInWithFacebook() { mSessionTracker = new SessionTracker(getBaseContext(), new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { //TODO.. } }, null, false); String applicationId = Utility.getMetadataApplicationId(getBaseContext()); mCurrentSession = mSessionTracker.getSession(); mSessionTracker.setSession(null); Session session = new Session.Builder(getBaseContext()).setApplicationId(applicationId).build(); Session.setActiveSession(session); mCurrentSession = session; if (!mCurrentSession.isOpened()) { Session.OpenRequest openRequest = null; openRequest = new Session.OpenRequest(FacebookFriendListActivity.this); if (openRequest != null) { openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS); openRequest.setPermissions(Arrays.asList("user_birthday", "email", "user_location", "user_friends")); openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK); mCurrentSession.openForRead(openRequest); accessFacebookUserInfo(); } } else { accessFacebookUserInfo(); } } Request friendListRequest = null; private void accessFacebookUserInfo() { if (Session.getActiveSession() != null & Session.getActiveSession().isOpened()) { Request cover_request = new Request(Session.getActiveSession(), "me", null, HttpMethod.GET, new Request.Callback() { @Override public void onCompleted(Response response) {} }); Request.executeBatchAsync(cover_request); Request meRequest = Request.newMeRequest(Session.getActiveSession(),new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { try { friendListRequest.executeAsync(); } catch (Exception jex) { jex.printStackTrace(); } } }); RequestBatch requestBatch = new RequestBatch(meRequest); requestBatch.addCallback(new RequestBatch.Callback() { @Override public void onBatchCompleted(RequestBatch batch) {} }); requestBatch.executeAsync(); friendListRequest = new Request(Session.getActiveSession(), "/me/friends", null, HttpMethod.GET, new Request.Callback() { @Override public void onCompleted(Response response) { try { GraphObject graphObj = response.getGraphObject(); if (graphObj != null) { JSONObject jsonObj = graphObj.getInnerJSONObject(); JSONArray data=jsonObj.getJSONArray("data"); if(data.length()>0 && data!=null) { for(int i=0;i<data.length();i++) { JSONObject dataobj= data.getJSONObject(i); String name=dataobj.getString("name"); String id=dataobj.getString("id"); System.out.println("name==============" + name); System.out.println("id==============" + id); facebooklist.add(id); facebook_id = facebooklist.toString().replace("[", ""); facebook_id = facebook_id.replace("]", ""); } } } } catch (Exception e) { e.printStackTrace(); } } }); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); if (mCurrentSession.isOpened()) { accessFacebookUserInfo(); } else { Toast.makeText(mContext, "some thing went wrong plz try later", Toast.LENGTH_LONG).show(); } } else { Toast.makeText(mContext, "some thing went wrong plz try later", Toast.LENGTH_LONG).show(); mCurrentSession = null; mSessionTracker.setSession(null); } } } 
  • Android Facebook sdk 4.2 no puede recibir correo electrónico
  • Android: Cómo ocultar el círculo de progreso en Facebook login
  • Sesión de Facebook destruida después de cerrar la aplicación
  • Error en el ID de aplicación de la aplicación facebook en Manifest
  • Android Cómo elegir una publicación con facebook 3.0 sdk
  • La aplicación de Facebook es pública, pero da error "No se ha configurado la aplicación" al iniciar sesión
  • "Facebook no se puede resolver a un tipo" en Facebook SDK para Android
  • Facebook Single-Sign On: cuando el usuario se desconecta de la aplicación de Facebook, ¿cómo puedo cerrar sesión en mi aplicación?
  • Imagen de captura de Android con cámara y compartir con Facebook sdk
  • Cómo ejecutar graph-api Facebook Android SDK
  • Las llamadas de la API desde el servidor requieren un argumento appsecret_proof
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.