Search code examples
androidfacebook-android-sdk

Facebook Login Button handling


I am using facebook login button in my app but when user clicks on login I have to get his current location using gps I am able to show the alert dialog for GPS not enabled if its not enabled it should not redirect to Facebook login page, but it still goes to facbook login page

loginButton = (LoginButton) findViewById(R.id.act_reg_fb_login);
callbackManager = CallbackManager.Factory.create();
loginButton.setOnClickListener(this);

handling the login button click listner

case R.id.act_reg_fb_login:
        if(isGettingHomeEntityData)

{
    List<String> permissions = new ArrayList<>();
    permissions.add("public_profile");
    permissions.add("email");
    permissions.add("user_likes");
    permissions.add("user_location");
    permissions.add("user_actions.books");
    loginButton.setReadPermissions(permissions);
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            if (loginResult.getAccessToken() == null) {
                showSignUpLoginIssue(Constants.ErrorIssue.ERR_WHILE_LOGIN);
            } else {
                getEmailFromFaceBookAndLogin(loginResult.getAccessToken());
            }
        }

        @Override
        public void onCancel() {
            UIUtility.showSnackBar(coolMain, getString(R.string.err_facebook_cancelled));
        }

        @Override
        public void onError(FacebookException error) {
            Log.e("fb error", String.valueOf(error));
            UIUtility.showSnackBar(coolMain, error.getLocalizedMessage());
        }
    });
    break;
}

else

{
    initializeLocationVariables();
    break;
}

Solution

  • Try this in onCreate() of your Activity

     private AccessTokenTracker accessTokenTracker;
    
        callbackManager = CallbackManager.Factory.create();
        updateWithToken(AccessToken.getCurrentAccessToken());
        accessTokenTracker = new AccessTokenTracker() {
            @Override
            protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) {
                updateWithToken(newToken);
            }
        };
        accessTokenTracker.startTracking();
    

    Also in onStop()

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

    in updateWithToken() method:

     private void updateWithToken(AccessToken currentAccessToken) {
    
        if (currentAccessToken != null) {
            LoginManager.getInstance().logOut();
        } else {
        }
    }