Search code examples
androidfacebook-graph-apifacebook-android-sdk

How to get the email of a user from the facebook LoginButton widget?


How can I get the email of a user from the facebook LoginButton widget?

I am getting null. The App Id I am using is correct. I can also get the correct name, but the email is missing. I do have permissions.

This is my code:

import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.facebook.widget.LoginButton.UserInfoChangedCallback;

// ...

public class MainActivity extends FragmentActivity {

    // ...

    @Override
    public void onCreate(Bundle savedInstanceState) {

        //

        LoginButton loginBtn = (LoginButton) findViewById(R.id.fb_login_button);

        loginBtn.setUserInfoChangedCallback(new UserInfoChangedCallback() {
            @Override
            public void onUserInfoFetched(GraphUser user) {
                if (user != null) {
                    userName.setText("Hello, " + user.getName());
                    Toast.makeText(getApplicationContext(),
                            "User Name is , " + user.getName(), Toast.LENGTH_LONG)
                            .show();
                    Toast.makeText(getApplicationContext(),
                            "Email Id is , " + user.getProperty("email") , Toast.LENGTH_LONG)
                            .show();
                } else {
                    userName.setText("You are not logged");
                }
            }  
        });
    }


    // ...

    private static final List<String> PERMISSIONS = Arrays.asList("publish_actions","email","basic_info");

    public void requestPermissions() {
        Session s = Session.getActiveSession();
        if (s != null)
            s.requestNewPublishPermissions(new Session.NewPermissionsRequest(
                    this, PERMISSIONS));
    }

Solution

  • public class Login extends ActionBarActivity {
    
        private CallbackManager callbackManager;
        String emailid, gender, bday, username;
        private LoginButton loginButton;
    
        ProfilePictureView profilePictureView;
    
        TextView info;
        private AccessTokenTracker accessTokenTracker;
    
        private ProgressDialog pDialog;
    
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                    .permitAll().build();
            StrictMode.setThreadPolicy(policy);
    
            FacebookSdk.sdkInitialize(this.getApplicationContext());
    
            callbackManager = CallbackManager.Factory.create();
    
            setContentView(R.layout.login);
    
            loginButton = (LoginButton) findViewById(R.id.login_button);
    
            loginButton.setReadPermissions(Arrays
                    .asList("public_profile, email, user_birthday, user_friends"));
    
            loginButton.registerCallback(callbackManager,
                    new FacebookCallback<LoginResult>() {
                        @Override
                        public void onSuccess(LoginResult loginResult) {
                            new fblogin().execute(loginResult.getAccessToken());
    
                        }
    
                        @Override
                        public void onCancel() {
    
                        }
    
                        @Override
                        public void onError(FacebookException e) {
    
                        }
                    });
    
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            callbackManager.onActivityResult(requestCode, resultCode, data);
        }
    
        class fblogin extends AsyncTask<AccessToken, String, String> {
    
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                pDialog = new ProgressDialog(Login.this);
                pDialog.setMessage("wait.");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(false);
                pDialog.show();
            }
    
            protected String doInBackground(AccessToken... params) {
                GraphRequest request = GraphRequest.newMeRequest(params[0],
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject object,
                                    GraphResponse response) {
    
                                Log.v("LoginActivity", response.toString());
    
                                try {
    
                                    username = object.getString("first_name");
    
                                    emailid = object.getString("email");
    
                                    gender = object.getString("gender");
    
                                    bday = object.getString("birthday");
    
                                } catch (JSONException e) {
                                    // TODO Auto-generated catch
                                    // block
                                    e.printStackTrace();
                                }
                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields",
                        "id,first_name,email,gender,birthday");
                request.setParameters(parameters);
                request.executeAndWait();
    
                return null;
            }
    
            protected void onPostExecute(String file_url) {
    
                pDialog.dismiss();
    
            }
    
        }
    
    
    }
    

    This method work in Async manner.

    Its Done . !!