android - 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();
}
}
}
我在我的代码中没有看到任何地方说它应该启动电子邮件流。请帮我。提前致谢
解决方案
解决它。我只需要使用
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 问题
推荐阅读
- java - Android/MySQL:如何根据与登录用户关联的部门显示数据?
- django - Django - 我如何检查过滤条件内的日期是否已过期
- spring - Neo4j 中是否需要有初始脚本,就像 rdbms 存储需要初始 CREATE(和其他 DDL 脚本)脚本来插入、更新等?
- c# - ITI 是否存在相当于“Memset”或“SecureZeroMemory”的 C#
- hazelcast - Hazelcast:: 在客户端设置 RingBuffer 容量
- android - 显示刷新率支持的 Android TV 和电视盒以支持实时视频播放,
- nginx - 如何更改 vue-cli 热重载端点(sockjs)的主机?
- python - 将带有图像的 Excel 工作表转换为 PDF 文件
- java - 使用@Query 时为方法使用命名参数
- vue.js - webpack 运行构建但不退出命令