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?
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)
);
}
});