2017-09-25 5 views
1

J'ai essayé d'utiliser le code ci-dessous pour obtenir mon adresse e-mail facebook via mon application, mais la valeur de retour est nulle.Impossible d'obtenir un e-mail à partir de Facebook dans Android

public class MainActivity extends AppCompatActivity { 
private CallbackManager callbackManager; 
private Button fb; 
private LoginButton loginButton; 
private AccessToken accessToken; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    callbackManager = CallbackManager.Factory.create(); 

    fb = (Button) findViewById(R.id.fb); 
    loginButton = (LoginButton) findViewById(R.id.login_button); 

    callbackManager = CallbackManager.Factory.create(); 
    LoginManager.getInstance().registerCallback(
      callbackManager, 
      new FacebookCallback <LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 

        accessToken= loginResult.getAccessToken(); 

        GraphRequestAsyncTask request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(JSONObject user, GraphResponse response) { 
          final Profile profile = Profile.getCurrentProfile(); 

          if ((user != null) && (profile != null)) { 

           accessToken = AccessToken.getCurrentAccessToken(); 

           if (accessToken.getDeclinedPermissions().isEmpty()) { 


            try { 
             String email = user.get("email").toString(); 
             Log.e("facebook response email",email+"mm"); 
             Log.e("facebook response",user.toString()+"mm"); 
            } catch (JSONException e) { 
             e.printStackTrace(); 
            } 


           } 


          } 
         } 
        }).executeAsync(); 

       } 

       @Override 
       public void onCancel() { 
       } 

       @Override 
       public void onError(FacebookException exception) { 
       } 
      } 
    ); 

} 

public void onClick(View v) { 
    if (v == fb) { 
     LoginManager.getInstance().logInWithReadPermissions(
       this, 
       Arrays.asList("email","public_profile") 
     ); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
    accessToken = AccessToken.getCurrentAccessToken(); 
    if (accessToken != null) { 
     Log.e("Token", "Token: " + accessToken.getToken()); 
     Log.e("UserID", "UserID: " + accessToken.getUserId()); 
    } 
} 

}

j'ai écrit un code mais le résultat est nul? Comment puis-je obtenir des courriels de Facebook SDK? Je ne sais pas quelle est la raison, mais je peux obtenir une adresse e-mail en utilisant l'explorateur API Graph. Est-ce que quelqu'un sait ce qui ne va pas avec ce code?

+0

Vous devez spécifier les champs que vous voulez – WizKid

+0

Je veux jeton et e-mail de Facebook. Tout est @WizKid – BekaKK

+0

Je sais. Lorsque vous faites la demande à Facebook, vous devez spécifier les champs que vous voulez. Sinon, Facebook ne vous les retournera pas – WizKid

Répondre

0

Pour récupérer le courrier électronique, vous devez définir explicitement le paramètre «Autoriser la lecture» sur l'adresse e-mail de l'utilisateur. Donc, s'il vous plaît insérer la ligne suivante dans votre code après avoir initialisé le loginButton

loginButton.setReadPermissions("email"); 

Il devrait commencer à retourner l'e-mail Id après.

Tout le meilleur !!

+0

Je l'ai essayé mais je ne l'ai toujours pas fait @Abhishek Singh – BekaKK

+0

Je pense que le problème est dans cette ligne logInWithReadPermissions – BekaKK

+0

@Baggio - Vous n'avez pas besoin de définir un LoginManager si vous définissez le LoginButton. LoginButton a LoginManager intégré dedans. Donc vous n'avez pas besoin de 2 boutons. Un bouton de connexion est bien. De même, vous n'avez pas enregistré le rappel dans votre LoginButton, mais dans une instance distincte de LoginManager. Veuillez simplifier votre code - utilisez uniquement le bouton de connexion FB, pas besoin d'un bouton supplémentaire ou d'une instance de LoginManager. –