FirebaseUI Email запускает поток входа в систему при запуске - PullRequest
3 голосов
/ 07 апреля 2020

У меня проблемы с FirebaseUI. Проблема в том, что при запуске запускается вход по электронной почте, не нажимая ни на что. Я хочу, чтобы он отображал различные параметры входа, но он продолжает запускать вход по электронной почте. Я хочу, чтобы это показывало это:

image

Но вместо этого он переходит непосредственно в поток входа в электронную почту всякий раз, когда приложение запускается и ничего не нажимает. Я никогда не получаю возможность выбрать Facebook или Google

image

Это мой LoginActivty

public class LoginActivity extends AppCompatActivity {

private static final int MY_REQUEST_CODE = 7117;
private FirebaseAuth mAuth;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mAuth = FirebaseAuth.getInstance();
    setContentView(R.layout.activity_login);
    showSignInOptions();
}

@Override
protected void onStart() {
    super.onStart();
    FirebaseUser currentUser = mAuth.getCurrentUser();
    if (currentUser != null) {
        startActivity(new Intent(LoginActivity.this, MainActivity.class));
    }
    else {
        Toast.makeText(this, "", Toast.LENGTH_SHORT).show();
    }
}

public void showSignInOptions() {
    AuthMethodPickerLayout loginLayout = new AuthMethodPickerLayout
            .Builder(R.layout.activity_login)
            .setEmailButtonId(R.id.email_button)
            .setFacebookButtonId(R.id.facebook_button)
            .setGoogleButtonId(R.id.google_button)
            .build();
    startActivityForResult(
            AuthUI.getInstance().createSignInIntentBuilder()
                    .setTheme(R.style.AppTheme)
                    .setAuthMethodPickerLayout(loginLayout)
                    .build(), MY_REQUEST_CODE
    );
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == MY_REQUEST_CODE) {
        IdpResponse response = IdpResponse.fromResultIntent(data);
        if (resultCode == RESULT_OK) {
            startActivity(new Intent(LoginActivity.this, MainActivity.class));
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
            Toast.makeText(this, "Welcome " + user.getDisplayName(), Toast.LENGTH_SHORT).show();
        }
        else {
            Toast.makeText(this, "" + response.getError().getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
}

Я не вижу нигде в моем код, который говорит, что это должно запустить поток электронной почты. Пожалуйста, помогите мне. Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Исправлено. Все, что мне было нужно, это использовать

setAvailableProviders();

Для моего SignInIntentBuilder ();

Код для моей новой функции LoginActivity:

public class LoginActivity extends AppCompatActivity {

private static final int MY_REQUEST_CODE = 7117;
private FirebaseAuth mAuth;

@Override
protected void onStart(){
    super.onStart();

    FirebaseUser currentUser = mAuth.getCurrentUser();
    if (currentUser != null) {
        startActivity(new Intent(LoginActivity.this, MainActivity.class));
        Toast.makeText(this, "Welcome back " + currentUser.getDisplayName(), Toast.LENGTH_SHORT).show();
    }
    else {
        Toast.makeText(this, "Please log in", Toast.LENGTH_SHORT).show();
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    mAuth = FirebaseAuth.getInstance();

    showSignInOptions();
}

private void showSignInOptions() {
    List<AuthUI.IdpConfig> providers = new ArrayList<>();
    providers.add(new AuthUI.IdpConfig.EmailBuilder().build());
    providers.add(new AuthUI.IdpConfig.FacebookBuilder().build());
    providers.add(new AuthUI.IdpConfig.GoogleBuilder().build());

    AuthUI.SignInIntentBuilder builder = AuthUI.getInstance().createSignInIntentBuilder();
    AuthMethodPickerLayout loginLayout = new AuthMethodPickerLayout
            .Builder(R.layout.activity_login)
            .setEmailButtonId(R.id.email_button)
            .setFacebookButtonId(R.id.facebook_button)
            .setGoogleButtonId(R.id.google_button)
            .build();

    startActivityForResult(
            builder.setAuthMethodPickerLayout(loginLayout)
                    .setAvailableProviders(providers)
                    .setTheme(R.style.AppTheme)
                    .setIsSmartLockEnabled(false)
                    .build(), MY_REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == MY_REQUEST_CODE) {
        IdpResponse response = IdpResponse.fromResultIntent(data);
        if (resultCode == RESULT_OK) {
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
            Toast.makeText(this, "Welcome " + user.getDisplayName(), Toast.LENGTH_SHORT).show();
        }
        else {
            Toast.makeText(this, "" + response.getError().getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
}

Найден связанный вопрос stackoverflow здесь

0 голосов
/ 07 апреля 2020

Этот код запускает процесс входа в систему:

startActivityForResult(
    AuthUI.getInstance().createSignInIntentBuilder()
        .setTheme(R.style.AppTheme)
        .setAuthMethodPickerLayout(loginLayout)
        .build(), MY_REQUEST_CODE
);

startActivityForResult делает именно то, что говорит - запускает действие, и в этом случае ему говорят запустить Firebase Пользовательский интерфейс деятельности. Поскольку вы вызываете его во время onCreate, текущая активность никогда не будет видна пользователю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...