Necesito la dirección de correo electrónico del usuario después de un inicio de sesión con éxito en facebook en android con SDK 4.0

He integrado más reciente de Facebook android sdk 4.0. En SDK 3.0+, la dirección de correo electrónico del usuario se recupera utilizando user.getProperty ("correo electrónico") después del inicio de sesión correcto. Estoy buscando el comando correspondiente en Facebook Android sdk 4.0 Referencia Enlaces:

Https://developers.facebook.com/docs/facebook-login/android/v2.3#overview https://developers.facebook.com/docs/android/upgrading-4.x

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); callbackManager = CallbackManager.Factory.create(); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); loginButton = (LoginButton) view.findViewById(R.id.login_button); loginButton.setReadPermissions("email", "user_likes", "user_friends"); loginButton.setFragment(this); setFacebookLoginText(loginButton); // Other app specific specialization // Callback registration loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { AccessToken accessToken = loginResult.getAccessToken(); GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject user, GraphResponse graphResponse) { //Need User email address after login success. } }).executeAsync(); } @Override public void onCancel() { Toast.makeText(getActivity(), "fail", Toast.LENGTH_SHORT).show(); } @Override public void onError(FacebookException exception) { Toast.makeText(getActivity(), "error", Toast.LENGTH_SHORT).show(); } }); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_facebook_login, container, false); return view; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } 

Sí funcionó. La única cosa requerida era cambiar GraphRequest a GraphRequestAsyncTask en el método onSuccess de FacebookCallBack, y entonces los detalles del usuario podrían ser fácilmente extraídos del JSONObject.

  @Override public void onSuccess(LoginResult loginResult) { final AccessToken accessToken = loginResult.getAccessToken(); final FBUser fbUser = new FBUser(); GraphRequestAsyncTask request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject user, GraphResponse graphResponse) { fbUser.setEmail(user.optString("email")); fbUser.setName(user.optString("name")); fbUser.setId(user.optString("id")); } }).executeAsync(); } 

En el nuevo gráfico de facebook necesitas pedir permisos para acceder a esa información. Por ejemplo en la actividad que usted ha puesto el LoginButton usted agrega esta línea en el método de OnCreate

 loginButtonFacebook.setReadPermissions(Arrays.asList("public_profile", "email", "user_birthday")); 

Entonces usted consigue esa información

 loginButtonFacebook.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { GraphRequest.newMeRequest( loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject me, GraphResponse response) { if (response.getError() != null) { // handle error } else { String email = me.optString("email"); } } }).executeAsync(); } 

Esto le dará toda la información de facebook sdk 4.0.0

FbloginButton.setReadPermissions ("correo electrónico");

  fbloginButton.registerCallback(callbackmanager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { AccessToken accessToken = loginResult.getAccessToken(); GraphRequest graphRequest=GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject object, GraphResponse response) { if (response.getError()!=null) { Log.e(TAG,"Error in Response "+ response); } else { email=object.optString("email"); Log.e(TAG,"Json Object Data "+object+" Email id "+ email); } } }); Bundle bundle=new Bundle(); bundle.putString("fields","id,email,name"); graphRequest.setParameters(bundle); graphRequest.executeAsync(); } 

Aparte de eso, pruebe si tiene permiso, de lo contrario pida a sus usuarios de nuevo:

 AccessToken accessToken=AccessToken.getCurrentAccessToken(); if (accessToken.getPermissions().contains("email")) { } else { } 
  • No hay AVD instalado
  • Eliminar paquetes de SDK de Android de la línea de comandos
  • ¿Cómo puedo emular la red 4G (LTE) en Android SDK
  • Bloquear una llamada de red desde una aplicación Android de SDK
  • Error al cambiar el nombre de las herramientas de directorio a temp \ ToolPackage.old01 en C: \ android-sdk-windows
  • Leadbolt Banner fuera de pantalla
  • ¿Cuál es el mejor SDK publicitario para móviles?
  • ¿Por qué elegiría la API de Android sobre las API de Google en el SDK de Eclipse?
  • No se puede actualizar build.gradle para usar la biblioteca de soporte 23.0.1
  • Problema de instalación de la plataforma 3.2 sdk. "Hecho. No se instaló nada "
  • Aplicación que se estrella en Android API menos de 5.0 (piruleta)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.