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 se puede resolver el destino 'android-8'
  • El gestor de SDK no encuentra java
  • Android Facebook SDK autorizar métodos muestra el diálogo cada vez
  • Descenso del SDK de Android (api 23 -> api 21)
  • Facebook SDK para la descarga de Android siempre falla
  • Botones de hardware AVD no habilitados
  • Su dispositivo no es compatible con esta versión para algunos dispositivos
  • ¿Qué versión de Apache HttpClient se utiliza en Android 4.2.2 SDK?
  • cuáles son los paquetes que instalo desde sdk manager en android studio
  • ¿Cómo desactivar mi servicio multimedia para una llamada entrante? Mi AudioManager no funciona
  • Problema de instalación de Android SDK
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.