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
相关产品推荐
相关产品推荐

