Search code examples
androidfacebooksocial-authentication

How to set Facebook login permissions when using a custom login button in Android


I am following this guide to set up social login via Facebook in my Android app: https://developers.facebook.com/docs/facebook-login/android/permissions

With Facebook's LoginButton setting the callback to handle user authentication result is easy:

facebookCallbackManager = CallbackManager.Factory.create();
final LoginButton facebookLoginButton = findViewById(R.id.facebook);
facebookLoginButton.setReadPermissions(Collections.singletonList(EMAIL));
LoginManager.getInstance().registerCallback(facebookCallbackManager,
        new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                final String accessToken = loginResult.getAccessToken().getToken();
                ...
            }

            @Override
            public void onCancel() {
            }

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

But when I swap LoginButton with other Android button, I can no longer user the setReadPermissions function.

My question is: How do I request user's email permission from Facebook when using a custom login button?


Solution

  • Add onClickListener on your custom button and call logInWithReadPermissions method on LoginManager inside onClick. This method accepts a list of permissions to request from the user.

    Complete example:

    facebookCallbackManager = CallbackManager.Factory.create();
    final MyFacebookButton facebookLoginButton = findViewById(R.id.facebook);
    LoginManager.getInstance().registerCallback(facebookCallbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    ...
                }
    
                @Override
                public void onCancel() {
                }
    
                @Override
                public void onError(FacebookException exception) {
                }
            });
    facebookLoginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            LoginManager
                    .getInstance()
                    .logInWithReadPermissions(
                            LoginActivity.this,
                            Collections.singletonList(EMAIL)
                    );
        }
    });