Android Firebase登录时task.isSuccessful()始终为false无法进入if分支如何修复
Android Firebase登录task.isSuccessful()始终返回false修复方案
第一步:先获取具体错误原因
你当前代码缺少错误日志打印,无法定位具体失败原因,先修改onComplete方法添加异常捕获:
@Override public void onComplete(@NonNull Task<AuthResult> task) { pd.dismiss(); // 无论成功失败都要关闭进度框,避免内存泄漏 if(task.isSuccessful()) { // 不要用getBaseContext,直接用当前Activity上下文 Intent intent = new Intent(LoginActivity.this, Wellcome.class); startActivity(intent); finish(); // 可选,关闭登录页避免按返回键回到登录界面 } else { // 打印错误日志,排查具体原因 Log.e("LoginFail", "登录失败原因:", task.getException()); Toast.makeText(LoginActivity.this, "登录失败:" + task.getException().getLocalizedMessage(), Toast.LENGTH_SHORT).show(); } }
运行后查看Logcat的LoginFail标签日志,根据错误信息对应修复以下常见问题:
常见问题及修复方案
- Firebase控制台配置错误
- 检查Firebase控制台「身份验证」-「登录方式」页面,是否已经启用电子邮件/密码登录选项
- 确认控制台填写的应用包名、SHA1签名和你当前运行的应用完全一致,debug和release环境的SHA1都需要单独添加
- 确认app模块下的
google-services.json是控制台最新下载的配置文件,修改控制台配置后需要重新下载替换
- 账号密码合法性问题
- 检查输入的邮箱是否已经在Firebase控制台「身份验证」-「用户」列表中存在,未注册的账号无法直接登录
- 确认输入的密码和注册时的密码完全一致,Firebase要求密码长度至少6位
- 可以添加前置校验,避免非法请求:
if (TextUtils.isEmpty(email) || !Patterns.EMAIL_ADDRESS.matcher(email).matches()) { Toast.makeText(this, "请输入正确的邮箱格式", Toast.LENGTH_SHORT).show(); return; } if (TextUtils.isEmpty(password) || password.length() < 6) { Toast.makeText(this, "密码长度不能少于6位", Toast.LENGTH_SHORT).show(); return; }
- 网络与权限问题
- 确认AndroidManifest.xml中已经添加网络权限:
<uses-permission android:name="android.permission.INTERNET" /> - 国内网络环境访问Firebase国际版需要科学上网,可切换网络环境测试
- 确认AndroidManifest.xml中已经添加网络权限:
- 初始化错误
- 确认
DBref.Auth已经正确初始化,推荐直接在登录页onCreate中获取实例:private FirebaseAuth mAuth; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); mAuth = FirebaseAuth.getInstance(); }
- 确认
内容的提问来源于stack exchange,提问作者עמית אזרזר
相关产品推荐
相关产品推荐

