una sacar saber persona obtener mis los extraer electronico correos correo conseguir como amigos amigo android facebook-android-sdk facebook-sdk-4.0

sacar - Android Facebook 4.0 SDK Cómo obtener correo electrónico, fecha de nacimiento y sexo del usuario



como sacar correos de facebook (9)

Estoy usando el siguiente código. Quiero la fecha de nacimiento, correo electrónico y género del usuario. Por favor ayuda. ¿Cómo recuperar esos datos?

Este es mi onViewCreated() dentro del Fragmento.

@Override public void onViewCreated(View view, Bundle savedInstanceState) { // Setup TextView. mTextDetails = (TextView) view.findViewById(R.id.text_details); // Set up Login Button. LoginButton mButtonLogin = (LoginButton) view.findViewById(R.id.login_button); // setFragment only if you are using it inside a Fragment. mButtonLogin.setFragment(this); mButtonLogin.setReadPermissions("user_friends"); mButtonLogin.setReadPermissions("public_profile"); mButtonLogin.setReadPermissions("email"); mButtonLogin.setReadPermissions("user_birthday"); // Register a callback method when Login Button is Clicked. mButtonLogin.registerCallback(mCallbackManager, mFacebookCallback); }

Este es mi método de devolución de llamada.

private FacebookCallback<LoginResult> mFacebookCallback = new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { Log.d("Shreks Fragment", "onSuccess"); Profile profile = Profile.getCurrentProfile(); Log.d("Shreks Fragment onSuccess", "" +profile); // Get User Name mTextDetails.setText(profile.getName() + ""); } @Override public void onCancel() { Log.d("Shreks Fragmnt", "onCancel"); } @Override public void onError(FacebookException e) { Log.d("Shreks Fragment", "onError " + e); } };


Agregue esta línea en Haga clic en el botón

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


Después de iniciar sesión

private void getFbInfo() { GraphRequest request = GraphRequest.newMeRequest( AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted( JSONObject object, GraphResponse response) { try { Log.d(LOG_TAG, "fb json object: " + object); Log.d(LOG_TAG, "fb graph response: " + response); String id = object.getString("id"); String first_name = object.getString("first_name"); String last_name = object.getString("last_name"); String gender = object.getString("gender"); String birthday = object.getString("birthday"); String image_url = "http://graph.facebook.com/" + id + "/picture?type=large"; String email; if (object.has("email")) { email = object.getString("email"); } } catch (JSONException e) { e.printStackTrace(); } } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,first_name,last_name,email,gender,birthday"); // id,first_name,last_name,email,gender,birthday,cover,picture.type(large) request.setParameters(parameters); request.executeAsync(); }


El siguiente es el código para encontrar la identificación del correo electrónico, el nombre y la URL del perfil, etc.

private CallbackManager callbackManager; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_in); //TODO on click of fb custom button call handleFBLogin() callbackManager = CallbackManager.Factory.create(); } private void handleFBLogin() { AccessToken accessToken = AccessToken.getCurrentAccessToken(); boolean isLoggedIn = accessToken != null && !accessToken.isExpired(); if (isLoggedIn && Store.isUserExists(ActivitySignIn.this)) { goToHome(); return; } LoginManager.getInstance().logInWithReadPermissions(ActivitySignIn.this, Arrays.asList("public_profile", "email")); LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(final LoginResult loginResult) { runOnUiThread(new Runnable() { @Override public void run() { setFacebookData(loginResult); } }); } @Override public void onCancel() { Toast.makeText(ActivitySignIn.this, "CANCELED", Toast.LENGTH_SHORT).show(); } @Override public void onError(FacebookException exception) { Toast.makeText(ActivitySignIn.this, "ERROR" + exception.toString(), Toast.LENGTH_SHORT).show(); } }); } private void setFacebookData(final LoginResult loginResult) { GraphRequest request = GraphRequest.newMeRequest( loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject object, GraphResponse response) { // Application code try { Log.i("Response", response.toString()); String email = response.getJSONObject().getString("email"); String firstName = response.getJSONObject().getString("first_name"); String lastName = response.getJSONObject().getString("last_name"); String profileURL = ""; if (Profile.getCurrentProfile() != null) { profileURL = ImageRequest.getProfilePictureUri(Profile.getCurrentProfile().getId(), 400, 400).toString(); } //TODO put your code here } catch (JSONException e) { Toast.makeText(ActivitySignIn.this, R.string.error_occurred_try_again, Toast.LENGTH_SHORT).show(); } } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,email,first_name,last_name"); request.setParameters(parameters); request.executeAsync(); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { callbackManager.onActivityResult(requestCode, resultCode, data); }


Esa no es la forma correcta de establecer los permisos, ya que los está sobrescribiendo con cada llamada al método.

Reemplace esto:

mButtonLogin.setReadPermissions("user_friends"); mButtonLogin.setReadPermissions("public_profile"); mButtonLogin.setReadPermissions("email"); mButtonLogin.setReadPermissions("user_birthday");

Con lo siguiente, como el método setReadPermissions() acepta una ArrayList:

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

También aquí está cómo consultar datos adicionales GraphRequest:

private LoginButton loginButton; private CallbackManager callbackManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); loginButton = (LoginButton) findViewById(R.id.login_button); loginButton.setReadPermissions(Arrays.asList( "public_profile", "email", "user_birthday", "user_friends")); callbackManager = CallbackManager.Factory.create(); // Callback registration loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { // App code GraphRequest request = GraphRequest.newMeRequest( loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject object, GraphResponse response) { Log.v("LoginActivity", response.toString()); // Application code String email = object.getString("email"); String birthday = object.getString("birthday"); // 01/31/1980 format } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,email,gender,birthday"); request.setParameters(parameters); request.executeAsync(); } @Override public void onCancel() { // App code Log.v("LoginActivity", "cancel"); } @Override public void onError(FacebookException exception) { // App code Log.v("LoginActivity", exception.getCause().toString()); } }); }

EDITAR:

Un posible problema es que Facebook asume que su correo electrónico no es válido. Para probarlo, use Graph API Explorer e intente obtenerlo. Si incluso allí no puede recibir su correo electrónico, cámbielo en la configuración de su perfil e intente nuevamente. Este enfoque resolvió este problema para algunos desarrolladores que comentaron mi respuesta.


Esto funcionó para mí, espero ayudar a alguien (usando mi propio botón, no el botón de inicio de sesión de FB)

CallbackManager callbackManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getApplicationContext()); setContentView(R.layout.activity_sign_in_user); LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject object, GraphResponse response) { try { Log.i("RESAULTS : ", object.getString("email")); }catch (Exception e){ } } }); Bundle parameters = new Bundle(); parameters.putString("fields", "email"); request.setParameters(parameters); request.executeAsync(); } @Override public void onCancel() { } @Override public void onError(FacebookException error) { Log.i("RESAULTS : ", error.getMessage()); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { callbackManager.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data); } boolean isEmailValid(CharSequence email) { return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches(); } public void signupwith_facebook(View view) { LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile","email")); } }


No obtendrá Profile en onSuccess() , debe implementar ProfileTracker junto con el registro de devolución de llamada

mProfileTracker = new ProfileTracker() { @Override protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) { // Fetch user details from New Profile } };

Tampoco olvides manejar el inicio y la parada del rastreador de perfil

Ahora tendrá un perfil para obtener AccessToken (resolvió el problema del perfil nulo). Solo tiene que usar " https://developers.facebook.com/docs/android/graph#userdata " para obtener cualquier información.



Use el método estático FB getCurrentProfile () de la clase Profile para recuperar esa información.

Profile profile = Profile.getCurrentProfile(); String firstName = profile.getFirstName()); System.out.println(profile.getProfilePictureUri(20,20)); System.out.println(profile.getLinkUri());


Use este fragmento para obtener toda la información del perfil

private FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { AccessToken accessToken = loginResult.getAccessToken(); Profile profile = Profile.getCurrentProfile(); // Facebook Email address GraphRequest request = GraphRequest.newMeRequest( loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted( JSONObject object, GraphResponse response) { Log.v("LoginActivity Response ", response.toString()); try { Name = object.getString("name"); FEmail = object.getString("email"); Log.v("Email = ", " " + FEmail); Toast.makeText(getApplicationContext(), "Name " + Name, Toast.LENGTH_LONG).show(); } catch (JSONException e) { e.printStackTrace(); } } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,email,gender, birthday"); request.setParameters(parameters); request.executeAsync(); } @Override public void onCancel() { LoginManager.getInstance().logOut(); } @Override public void onError(FacebookException e) { } };