首页 > 解决方案 > FirebaseUI 电子邮件在启动时启动电子邮件登录流程

问题描述

我在使用 FirebaseUI 时遇到问题。问题是,它会在启动时启动电子邮件登录流程,而无需单击任何内容。我希望它显示不同的登录选项,但它会不断启动电子邮件登录流程。我希望它显示这一点:

图片

但相反,它会在应用程序启动时直接进入电子邮件登录流程,无需单击任何内容。我永远无法选择 Facebook 或 Google

图片

这是我的登录活动

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

我在我的代码中没有看到任何地方说它应该启动电子邮件流。请帮我。提前致谢

标签: androidfirebase-authenticationfirebaseui

解决方案


解决它。我只需要使用

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 问题


推荐阅读