Android Studio中Firebase手机号验证提示invalid phone number错误
Firebase手机号验证
invalid-phone-number错误解决指南 核心问题定位
你遇到的firebase_auth/invalid-phone-number错误本质是手机号未严格遵循E.164格式规范,Firebase对格式要求极为严格:
- 必须以
+开头 - 紧跟纯数字国家码(如中国是86、美国是1)
- 后续是无任何分隔符(空格、横杠、括号均不允许)的纯数字手机号
- 示例:中国手机号正确格式为
+8613800138000
具体修复步骤
1. 强制规范手机号输入格式
在发送OTP前对用户输入的手机号做格式清洗与校验,确保符合E.164标准:
- 去除所有非数字字符
- 自动补全
+和对应国家码(根据目标地区调整)
修改sendotp按钮的点击事件逻辑:
sendotp.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { String inputPhone = phonenumber.getText().toString().trim(); // 清除所有非数字字符 String cleanedPhone = inputPhone.replaceAll("[^0-9]", ""); // 自动补全+86(针对中国地区,其他地区替换对应国家码) if (!cleanedPhone.startsWith("+")) { phone = "+86" + cleanedPhone; } else { phone = cleanedPhone; } // 校验最终格式长度(中国手机号+86后需11位数字,总长度13) if (phone.length() == 13) { sendOTP(phone); } else { Toast.makeText(MainActivity.this, "请输入正确的11位手机号", Toast.LENGTH_SHORT).show(); } } });
2. 补充提交按钮的验证逻辑
你的代码中submit按钮未绑定点击事件,导致输入OTP后无法触发验证,补上该逻辑:
// 在onCreate方法中添加submit按钮点击事件 submit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String code = otp.getText().toString().trim(); if (!code.isEmpty()) { verifyCode(code); } else { Toast.makeText(MainActivity.this, "请输入验证码", Toast.LENGTH_SHORT).show(); } } });
3. 完善错误排查信息
在onVerificationFailed中添加日志打印,方便精准定位问题:
@Override public void onVerificationFailed(FirebaseException e) { Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); // 打印详细错误日志到Logcat Log.e("FirebaseAuthError", "验证失败:" + e.getMessage(), e); }
记得导入Log类:
import android.util.Log;
额外注意事项
- 确保Firebase控制台已添加调试版和发布版的SHA-1、SHA-256指纹
- 检查
google-services.json是否为当前项目的最新配置文件 - 测试使用真实手机号,Firebase不支持虚拟号码或非合规测试号码(部分地区除外)
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

