Firebase AuthUI手机号登录报PhoneNumberVerificationRequiredException如何解决
错误日志说明
你遇到的是Firebase AuthUI手机号登录流程的标准异常,日志核心报错如下:
E/AuthUI: 发生登录错误。
com.firebase.ui.auth.data.model.PhoneNumberVerificationRequiredException: 手机号需要验证。
at com.firebase.ui.auth.ui.phone.PhoneNumberVerificationHandler$1.onCodeSent(PhoneNumberVerificationHandler.java:54)
异常触发原因
- 该异常是Firebase AuthUI已成功向指定手机号发送短信验证码、要求完成验证码校验的信号,抛出的核心原因是你没有正确处理验证码验证环节,直接中断了登录流程
- 你自行拦截了AuthUI的
onCodeSent回调,没有跳转到验证码输入页面,也没有调用对应接口完成验证码校验 - Firebase控制台的手机号登录配置异常,或者应用指纹、权限配置错误,导致reCAPTCHA校验失败,验证流程被强制中断触发异常
- 测试过程中在验证码发送后主动杀死应用、关闭登录页,残留的验证状态触发后续登录时抛出该异常
排查与修复方案
1. 登录流程校验
如果使用AuthUI默认的登录流程,不要自定义拦截回调,确保配置代码完整,参考示例:
// 初始化登录配置 val signInProviders = listOf( AuthUI.IdpConfig.PhoneBuilder().build() ) // 启动AuthUI默认登录页 startActivityForResult( AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(signInProviders) .build(), RC_SIGN_IN )
默认流程会自动跳转验证码输入页、完成校验,不会抛出该异常。
如果使用自定义验证逻辑,需要主动捕获该异常完成后续流程:
- 捕获
PhoneNumberVerificationRequiredException,取出异常中携带的verificationId - 跳转自定义验证码输入页,获取用户输入的短信验证码
- 调用
PhoneAuthProvider.getCredential(verificationId, 用户输入的验证码)生成登录凭证 - 调用
FirebaseAuth.getInstance().signInWithCredential(凭证)完成最终登录
2. 基础配置排查
- 确认Firebase控制台已启用「手机号」登录provider
- 确认当前应用的SHA1、SHA256指纹已正确配置到Firebase控制台,指纹不匹配会触发风控导致验证流程失败
- 确认应用已申请
INTERNET权限,网络异常会导致验证码校验流程中断
3. 测试场景优化
- 测试时不要在验证码发送后直接关闭登录页面,等待验证流程完成后再操作
- 可以在Firebase控制台配置测试手机号和固定验证码,避免频繁发送短信触发平台风控,导致验证流程被拦截
内容的提问来源于stack exchange,提问作者Waqar Sultan
相关产品推荐
相关产品推荐

