Android Facebook 4.0 SDK Comment obtenir un courriel, la date de naissance et le sexe de l’utilisateur

J’utilise le code suivant. Je veux la date de naissance, le courriel et le sexe de l’utilisateur. S’il vous plaît aider. Comment récupérer ces données?

Ceci est mon onViewCreated() dans le fragment.

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

Ceci est ma méthode de rappel.

 private FacebookCallback mFacebookCallback = new FacebookCallback() { @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); } }; 

    Ce n’est pas la bonne façon de définir les permissions lorsque vous les écrasez avec chaque appel de méthode.

    Remplacez ceci:

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

    Avec la méthode suivante, comme la méthode setReadPermissions() accepte une ArrayList:

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

    Voici également comment interroger des données supplémentaires 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() { @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.toSsortingng()); // Application code Ssortingng email = object.getSsortingng("email"); Ssortingng birthday = object.getSsortingng("birthday"); // 01/31/1980 format } }); Bundle parameters = new Bundle(); parameters.putSsortingng("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().toSsortingng()); } }); } 

    MODIFIER:

    Un problème possible est que Facebook suppose que votre email est invalide. Pour le tester, utilisez l’ explorateur API graphique et essayez de l’obtenir. Si vous ne parvenez pas à obtenir votre courrier électronique, modifiez-le dans les parameters de votre profil et réessayez. Cette approche a résolu ce problème pour certains développeurs en commentant ma réponse.

    Vous n’obtiendrez pas de profil dans onSuccess() vous devez implémenter ProfileTracker avec l’enregistrement du rappel

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

    N’oubliez pas non plus de gérer le démarrage et l’arrêt du suivi de profil

    Vous aurez maintenant un profil pour accéder à AccessToken (résolution du problème de profil nul). Vous devez simplement utiliser ” https://developers.facebook.com/docs/android/graph#userdata ” pour obtenir des données.

    Utilisez cet extrait pour obtenir toutes les informations de profil

     private FacebookCallback callback = new FacebookCallback() { @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.toSsortingng()); try { Name = object.getSsortingng("name"); FEmail = object.getSsortingng("email"); Log.v("Email = ", " " + FEmail); Toast.makeText(getApplicationContext(), "Name " + Name, Toast.LENGTH_LONG).show(); } catch (JSONException e) { e.printStackTrace(); } } }); Bundle parameters = new Bundle(); parameters.putSsortingng("fields", "id,name,email,gender, birthday"); request.setParameters(parameters); request.executeAsync(); } @Override public void onCancel() { LoginManager.getInstance().logOut(); } @Override public void onError(FacebookException e) { } }; 

    Vous pouvez utiliser la classe GraphRequest pour émettre des appels vers l’API Facebook Graph afin d’obtenir des informations utilisateur. Voir https://developers.facebook.com/docs/android/graph pour plus d’informations.

    Après la connexion

     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); Ssortingng id = object.getSsortingng("id"); Ssortingng first_name = object.getSsortingng("first_name"); Ssortingng last_name = object.getSsortingng("last_name"); Ssortingng gender = object.getSsortingng("gender"); Ssortingng birthday = object.getSsortingng("birthday"); Ssortingng image_url = "http://graph.facebook.com/" + id + "/picture?type=large"; Ssortingng email; if (object.has("email")) { email = object.getSsortingng("email"); } } catch (JSONException e) { e.printStackTrace(); } } }); Bundle parameters = new Bundle(); parameters.putSsortingng("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(); } 

    Ceci est travaillé pour moi, en espérant aider quelqu’un (en utilisant mon propre bouton pas le bouton de connexion 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() { @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.getSsortingng("email")); }catch (Exception e){ } } }); Bundle parameters = new Bundle(); parameters.putSsortingng("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")); } } 

    Voici le code pour trouver l’ID de messagerie, le nom et l’url du profil, 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() { @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.toSsortingng(), 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.toSsortingng()); Ssortingng email = response.getJSONObject().getSsortingng("email"); Ssortingng firstName = response.getJSONObject().getSsortingng("first_name"); Ssortingng lastName = response.getJSONObject().getSsortingng("last_name"); Ssortingng profileURL = ""; if (Profile.getCurrentProfile() != null) { profileURL = ImageRequest.getProfilePictureUri(Profile.getCurrentProfile().getId(), 400, 400).toSsortingng(); } //TODO put your code here } catch (JSONException e) { Toast.makeText(ActivitySignIn.this, R.ssortingng.error_occurred_try_again, Toast.LENGTH_SHORT).show(); } } }); Bundle parameters = new Bundle(); parameters.putSsortingng("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); } 

    Utilisez la méthode statique FB getCurrentProfile () de la classe Profile pour récupérer ces informations.

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