Как установить права входа в Facebook при использовании пользовательской кнопки входа в Android

Я следую этому руководству, чтобы настроить социальную регистрацию через Facebook в моем приложении для Android: https://developers.facebook.com/docs/facebook-login/android/permissions

С фейсбука LoginButton установить обратный вызов для обработки результата аутентификации пользователя легко:

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

Но когда я поменяюсь LoginButton с другой кнопкой Android, я больше не могу использовать setReadPermissions функция.

У меня такой вопрос: как запросить разрешение пользователя электронной почты от Facebook при использовании пользовательской кнопки входа?

2 ответа

Решение

Добавлять onClickListener on your custom button and call logInWithReadPermissions метод на LoginManager внутри onClick, This method accepts a list of permissions to request from the user.

Полный пример:

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)
                );
    }
});
private CallbackManager mCallbackManager;

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

FacebookSdk.sdkInitialize(this.getApplicationContext());

mCallbackManager = CallbackManager.Factory.create();

LoginManager.getInstance().registerCallback(mCallbackManager,
        new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Log.d("Success", "Login");

            }

            @Override
            public void onCancel() {
                Toast.makeText(MainActivity.this, "Login Cancel", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onError(FacebookException exception) {
                Toast.makeText(MainActivity.this, exception.getMessage(), Toast.LENGTH_LONG).show();
            }
        });

setContentView(R.layout.activity_main);

Button btn_fb_login = (Button)findViewById(R.id.btn_fb_login);

btn_fb_login.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
          LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
    }
});

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent 
data) {
super.onActivityResult(requestCode, resultCode, data);
if(mCallbackManager.onActivityResult(requestCode, resultCode, data)) {
    return;
}
}
Другие вопросы по тегам