tutorial studio integrar instalar con compile android facebook facebook-graph-api facebook-android-sdk

android - studio - Obtener lista de amigos facebook 3.0



integrar sdk facebook en android (7)

Estoy tratando de obtener mi lista de amigos de Facebook usando el nuevo SDK (3.0). Estoy enfrentando problemas relacionados con qué tipo de parámetros necesito insertar en un paquete 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. Basado en GraphExplorer , inserto en mi Bundle los "campos" clave con esta cadena "id, name, friend" como valor. El siguiente código muestra lo que estoy haciendo en este momento. Después de obtener Mi imagen y nombre ejecuto newMyFriendRequest. Creo que usa GraphAPI por defecto.

He visto aquí en StackOverflow algunas publicaciones relacionadas:

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

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

Me ayuda poco y no quiero usar FQL. Para la respuesta, recibo 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(); } }


Use el siguiente código para obtener la lista de amigos de Facebook. Mostrará solo los datos de aquellos usuarios a los que se les haya hecho iniciar sesión en Facebook con la aplicación, y los usuarios tengan identificaciones 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); } } }


Desafortunadamente, Facebook elimina esos permisos.

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

En v2.0, el punto final de la API de amigos devuelve la lista de amigos de una persona que también usa su aplicación. En v1.0, la respuesta incluyó a todos los amigos de una persona.

En v1.0, era posible solicitar permisos que permitieran a una aplicación ver una cantidad limitada de datos de amigos, como los "Me gusta" de un amigo, sus cumpleaños, etc.

En v2.0, todos esos permisos se han eliminado. Ya no es posible que una aplicación vea datos de los amigos de una persona, a menos que esos amigos también hayan iniciado sesión en la aplicación y hayan otorgado permiso para que la aplicación pueda ver esa información.

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


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

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

por

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


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


Para la persona que pregunta cómo obtener el nombre y el apellido, debe poner first_name y last_name en lugar de name.

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


Puede usar mi código, necesita usar la biblioteca de Facebook en su 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..."); } }

Los nombres y los identificadores son dos matrices de cadenas y ahora tienen todos los nombres y las identificaciones de los amigos. Espero que resuelva tu problema


Usando 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