You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio模拟器擦除数据后Firebase无法识别已注册账号如何解决

问题原因分析

擦除模拟器数据或用户手动擦除应用数据,本身不会删除Firebase云端存储的用户账号记录,出现无对应该标识符的用户记录或FirebaseAuthInvalidUserException报错,大概率是以下原因导致:

  • 擦除模拟器数据后,本地谷歌服务框架重置,无法正常连接Firebase服务,或模拟器当前连接的Firebase项目与你在控制台查看用户的项目不匹配
  • 登录输入的邮箱存在多余空格、大小写和云端注册邮箱不一致的情况,Firebase Auth默认对邮箱大小写敏感
  • 应用开启了Firebase电子邮件枚举保护,本地无缓存时触发了校验拦截
修复方案

即时修复(解决当前模拟器报错问题)

  • 先确认模拟器网络正常,且已激活谷歌服务框架,可正常访问谷歌相关服务
  • 核对当前工程内的google-services.json文件,和你查看用户的Firebase项目配置一致,没有误连接其他测试项目
  • 登录时手动确认输入的邮箱、密码和云端注册信息完全一致,避免大小写、空格误差

代码优化(用户擦除应用数据后也不会触发异常)

现有代码未对输入内容做标准化处理,也未对异常做分类适配,按以下逻辑修改即可:

  1. 对输入的邮箱做去空格、统一小写处理,避免格式误差
  2. 优化异常分支判断,给用户明确的操作提示
    修改后的LogAuth方法代码如下:
private void LogAuth(){
    // 邮箱输入标准化处理
    String email = provided_email.getText().toString().trim().toLowerCase();
    String pass = provided_pass.getText().toString();

    if(!email.matches(emailPattern)) {
        provided_email.setError("请输入正确的邮箱格式");
    }
    else if(pass.isEmpty() || pass.length()<6) {
        provided_pass.setError("请输入长度不小于6位的密码");
    }
    else{
        progressDialog.setMessage("登录处理中,请稍候...");
        progressDialog.setTitle("登录");
        progressDialog.setCanceledOnTouchOutside(false);
        progressDialog.show();
        mAuth.signInWithEmailAndPassword(email,pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete( Task<AuthResult> task) {
                if(task.isSuccessful()){
                    progressDialog.dismiss();
                    sendUserToNextActivity();
                    Toast.makeText(MainActivity.this,"登录成功", Toast.LENGTH_SHORT).show();
                }
                else{
                    progressDialog.dismiss();
                    // 分类处理异常
                    if (task.getException() instanceof FirebaseAuthInvalidUserException) {
                        Toast.makeText(MainActivity.this,"未找到对应账号,请检查邮箱输入是否正确", Toast.LENGTH_SHORT).show();
                    } else if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                        Toast.makeText(MainActivity.this,"密码错误,请重试", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(MainActivity.this,"登录失败:"+task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
    }
}

如果以上操作后仍有报错,可在Firebase控制台获取对应账号的用户UID,通过生成自定义令牌调用signInWithCustomToken登录,验证账号本身是否正常。

内容的提问来源于stack exchange,提问作者Don'thavetHanswers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:54:03