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

Firebase邮箱密码注册功能失效,账户未创建且getEmail调用空指针报错

解决方案

一、过期Google Cloud API密钥修复步骤

  • 进入Google Cloud控制台,打开当前Firebase项目绑定的GCP项目
  • 搜索进入「API 和服务」页面,点击左侧菜单栏的「凭据」选项
  • 在凭据列表中找到名称为Android key (auto created by Firebase)的条目,这就是Firebase自动生成供安卓端调用服务的API密钥,过期时状态会有明确标注
  • 二选一执行修复操作:
    • 方式一:点击过期密钥进入详情页,在「密钥限制」板块找到「有效期」配置项,按需调整有效期(可设置为永不过期,也可按安全规范设置固定时长),保存设置后立即生效
    • 方式二:直接删除过期密钥,进入Firebase控制台的项目设置页,重新下载最新的google-services.json文件,替换安卓项目app目录下的旧配置文件,Firebase会自动同步生成新的有效API密钥到GCP
  • 修复完成后清理安卓项目的构建缓存,重新编译安装APP即可

二、原有代码逻辑优化

你当前代码的判断逻辑存在漏洞,task.isComplete()仅代表账户创建请求执行完毕,无论成功失败都会触发,所以才会在创建失败时强行读取null用户对象触发崩溃。建议修改为以下逻辑:

auth.createUserWithEmailAndPassword(email, password)
        .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                // 先判断请求是否成功,再读取返回结果
                if(task.isSuccessful() && task.getResult() != null){
                    // 直接从返回结果取用户,比调用getCurrentUser更稳妥
                    FirebaseUser user = task.getResult().getUser();
                    if(user != null){
                        Map<String, Object> map = new HashMap<>();
                        map.put("email", user.getEmail());
                        map.put("uuid", user.getUid());
                        db.collection("users")
                                .document(user.getUid())
                                .set(map)
                                .addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void unused) {
                                        Intent intent = new Intent(Register.this, MainActivity.class);
                                        startActivity(intent);
                                        finish();
                                    }
                                }).addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Toast.makeText(Register.this, e.getMessage(), Toast.LENGTH_LONG).show();
                            }
                        });
                    }
                } else {
                    // 注册失败时打印错误信息,方便排查
                    if(task.getException() != null){
                        Toast.makeText(Register.this, "注册失败:" + task.getException().getMessage(), Toast.LENGTH_LONG).show();
                    }
                }
            }
        });

三、可选排查项

如果修复密钥后仍无法创建账户,可以优先检查以下配置:

  • Firebase控制台中「身份验证-登录方式」页面的「电子邮件/密码」登录开关是否处于启用状态
  • 输入的邮箱格式是否合法,密码长度是否符合Firebase要求(最少6位)
  • GCP控制台中「Identity Toolkit API」是否处于启用状态

内容的提问来源于stack exchange,提问作者qwirrr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:45:03