Java – I can’t sign in with my Facebook credentials after signing out

I can’t sign in with my Facebook credentials after signing out… here is a solution to the problem.

I can’t sign in with my Facebook credentials after signing out

I have an Android app that allows users to log in with their Facebook credentials. Once they log out for the first time, they can’t log in again. From Applications page in user settings After clearing the permissions of the app on Facebook’s website, the login works fine.

I logged in using LoginButton.

You need an activity that has access to login information, extend this AuthActivity Activity.

public class AuthActivity extends Activity {
    private AuthUtils authUtils;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

authUtils = new AuthUtils(this);
        authUtils.onCreate(savedInstanceState);
    }

public AuthUtils getAuthUtils() {
        return authUtils;
    }

@Override
    public void onStart() {
        super.onStart();
        authUtils.onStart();
    }

@Override
    public void onStop() {
        super.onStop();
        authUtils.onStop();
    }

@Override
    public void onResume() {
        super.onResume();
        authUtils.onResume();
    }

@Override
    public void onPause() {
        super.onPause();
        authUtils.onPause();
    }

@Override
    public void onDestroy() {
        super.onDestroy();
        authUtils.onDestroy();
    }

@Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        authUtils.onSaveInstanceState(outState);
    }

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

AuthUtils looks like this. I removed everything related to Google+ sign-in and everything unrelated to the sign-in process, such as saving user information using my app preferences.

public class AuthUtils implements ConnectionCallbacks, OnConnectionFailedListener {
    private final Activity activityContext;
    private UiLifecycleHelper facebookUiHelper;

public AuthUtils(Activity context) {
        this.activityContext = context;

facebookUiHelper = new UiLifecycleHelper(context, facebookStatusCallback);
    }

public void signInFacebook() {
        LoginButton facebookLoginButton = new LoginButton(activityContext);
        facebookLoginButton.setReadPermissions(Arrays.asList("email"));
        facebookLoginButton.performClick();
    }

public void signOutFacebook() {
        Session facebookSession = Session.getActiveSession();
        if(facebookSession != null) {
            facebookSession.closeAndClearTokenInformation();
        }
    }

private StatusCallback facebookStatusCallback = new StatusCallback() {
        @Override
        public void call(final Session session, SessionState state, Exception exception) {
            if(state.isOpened()) {
                Request.newMeRequest(session, new GraphUserCallback() {
                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        String email = "";

if(user.asMap().containsKey("email")) {
                            email = user.getProperty("email").toString();
                        } else {
                            // ... not related to login
                        }

 Some actions here, not related to login.
                    }
                });
            } else if(state.isClosed()) {
                // ... not related to login
            }
        }
    };

public void onCreate(Bundle savedInstanceState) {
        facebookUiHelper.onCreate(savedInstanceState);
    }

public void onResume() {
        facebookUiHelper.onResume();
    }

public void onPause() {
        facebookUiHelper.onPause();
    }

public void onDestroy() {
        facebookUiHelper.onDestroy();
    }

public void onSaveInstanceState(Bundle outState) {
        facebookUiHelper.onSaveInstanceState(outState);
    }

public void onActivityResult(int requestCode, int resultCode, Intent data) {
        facebookUiHelper.onActivityResult(requestCode, resultCode, data);
    }
}

Solution