2017-07-14 1 views
0

Salut, je suis en train de recevoir des informations de la facebook sdk 4 mais sans chance jusqu'à présent :(Android Facebook SDK 4 email retour null

J'espère qu'il ya quelqu'un ici qui peut me aider :)

Le code est juste retour email nul, mais mon compte facebook a un email, et l'application a accès à l'e-mail dans l'examen de l'application de développeur.

Voici mon code:

public class LoginActivity extends Activity { 
private CallbackManager callbackManager; 
private LoginButton loginButton; 
private TextView btnLogin; 
private ProgressDialog progressDialog; 
User user; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    if(PrefUtils.getCurrentUser(LoginActivity.this) != null){ 

     Intent homeIntent = new Intent(LoginActivity.this, LogoutActivity.class); 

     startActivity(homeIntent); 

     finish(); 
    } 
} 

@Override 
protected void onResume() { 
    super.onResume(); 


    callbackManager=CallbackManager.Factory.create(); 

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

    loginButton.setReadPermissions("public_profile", "email","user_friends", "user_location", "user_birthday", "user_photos"); 

    btnLogin= (TextView) findViewById(R.id.btnLogin); 
    btnLogin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      progressDialog = new ProgressDialog(LoginActivity.this); 
      progressDialog.setMessage("Loading..."); 
      progressDialog.show(); 

      loginButton.performClick(); 

      loginButton.setPressed(true); 

      loginButton.invalidate(); 

      loginButton.registerCallback(callbackManager, mCallBack); 

      loginButton.setPressed(false); 

      loginButton.invalidate(); 

     } 
    }); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 


private FacebookCallback<LoginResult> mCallBack = new FacebookCallback<LoginResult>() { 
    @Override 
    public void onSuccess(LoginResult loginResult) { 

     progressDialog.dismiss(); 

     // App code 
     final GraphRequest request = GraphRequest.newMeRequest(
       loginResult.getAccessToken(), 
       new GraphRequest.GraphJSONObjectCallback() { 
        @Override 
        public void onCompleted(
          JSONObject object, 
          GraphResponse response) { 

         Log.e("response: ", response + ""); 
          try { 
           user = new User(); 
           user.facebookID = object.getString("id").toString(); 
           //user.email = object.getString("email"); 
           user.email = object.optString("email"); 
           user.name = object.getString("name").toString(); 
           user.gender = object.getString("gender").toString(); 
           user.birthday = object.getString("birthday").toString(); 
           PrefUtils.setCurrentUser(user,LoginActivity.this); 

          }catch (Exception e){ 
           e.printStackTrace(); 
          } 
          Toast.makeText(LoginActivity.this,"welcome "+user.name,Toast.LENGTH_LONG).show(); 
          Intent intent=new Intent(LoginActivity.this,LogoutActivity.class); 
          startActivity(intent); 
          finish(); 

        } 

       }); 

     Bundle parameters = new Bundle(); 
     parameters.putString("fields", "id,name,email,gender,birthday"); 
     request.setParameters(parameters); 
     request.executeAsync(); 
    } 

    @Override 
    public void onCancel() { 
     progressDialog.dismiss(); 
    } 

    @Override 
    public void onError(FacebookException e) { 
     progressDialog.dismiss(); 
    } 
}; 

} 

Répondre

0

Eh bien, j'ai jamais eu un problème comme celui-ci. Dans mon cas, c'est parce que le compte que vous utilisez, il a été enregistré sans email, en utilisant simplement le numéro de téléphone. Puisque facebook est disponible pour faire une inscription sans email, alors ce bug est apparu.

Essayez de télécharger l'application Zalora, ils ont résolu ce problème faire une nouvelle page de ré-envoyer l'email

0

ajouter juste .toString(); à la ligne que vous avez commentée. essayer comme ça

       try { 
            user = new User(); 
            user.facebookID = object.getString("id").toString(); 
            user.email = object.getString("email").tostring; 
            user.name = object.getString("name").toString(); 
            user.gender = object.getString("gender").toString(); 
            user.birthday = object.getString("birthday").toString(); 
            PrefUtils.setCurrentUser(user,LoginActivity.this); 

           } 

Si cela ne fonctionne ajouter des autorisations de connexion liste de tableau

loginManager.logInWithReadPermissions((Activity) context, Arrays.asList("public_profile","email","user_friends", "user_location", "user_birthday", "user_photos"));