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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:54:01