¿Cómo obtener ID de correo electrónico de Facebook SDK en aplicaciones de Android?

Integré el inicio de sesión de Facebook en mi aplicación de Android. Deseo obtener la identificación de correo electrónico del usuario de inicio de sesión. ¿Cómo lo obtendré?

private void loginToFacebook() { Session.openActiveSession(this, true, new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { if (session.isOpened()) { Log.i(TAG, "Access Token" + session.getAccessToken()); Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { if (user != null) { try { userID =user.getId(); provider="facebook"; userName=user.getUsername(); firstName=user.getFirstName(); lastName=user.getLastName(); Log.d("****User****", "details:" + user); }catch(Exception e){ 

Aquí está mi código. Request.GraphUserCallback() uso el método Request.GraphUserCallback() pero no hay respuesta de correo electrónico de este método.

Antes de llamar a Session.openActiveSession haga esto para obtener permisos añada esto:

 List permissions = new ArrayList(); permissions.add("email"); 

El último parámetro en Session.openActiveSession() debería ser permissions . Ahora puede acceder a user.getProperty("email").toString() .

EDITAR:

Esta es la forma en que estoy haciendo la autorización de Facebook:

 List permissions = new ArrayList(); permissions.add("email"); loginProgress.setVisibility(View.VISIBLE); //start Facebook session openActiveSession(this, true, new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { if (session.isOpened()) { //make request to the /me API Log.e("sessionopened", "true"); Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { if (user != null) { String firstName = user.getFirstName(); String lastName = user.getLastName(); String id = user.getId(); String email = user.getProperty("email").toString(); Log.e("facebookid", id); Log.e("firstName", firstName); Log.e("lastName", lastName); Log.e("email", email); } } }); } } }, permissions); 

Agregue este método a su actividad:

 private static Session openActiveSession(Activity activity, boolean allowLoginUI, Session.StatusCallback callback, List permissions) { Session.OpenRequest openRequest = new Session.OpenRequest(activity).setPermissions(permissions).setCallback(callback); Session session = new Session.Builder(activity).build(); if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI) { Session.setActiveSession(session); session.openForRead(openRequest); return session; } return null; } 

Siguiendo la sugerencia de Egor N, cambio mi código anterior

 Session.openActiveSession(this, true, statusCallback); 

con este nuevo:

 List permissions = new ArrayList(); permissions.add("email"); Session.openActiveSession(this, true, permissions, statusCallback); 

Ahora FB pregunta al usuario sobre el permiso del correo electrónico y puedo leerlo en la respuesta.

Prueba este artículo. Espero que sus problemas se resuelvan Haga clic aquí

Por cierto, necesitas usar user.asMap().get("email").toString()); para recibir la ID de correo electrónico del usuario. Además, debe asignarlo a alguna etiqueta como lblEmail.setText donde lblEmail es una vista de texto.