Flutter集成Firebase手机验证时OTP无法发送到手机如何解决
排查解决步骤
- 先明确测试手机号的规则:你在Firebase控制台配置的测试手机号,本身就不会触发真实短信发送,只能用你绑定的固定测试OTP登录,这是官方设计的正常逻辑,不需要修复。
- 检查Firebase项目计费状态:未升级到Blaze付费计划的Firebase新项目,绝大多数地区的真实手机号短信发送配额为0,直接无法发送OTP。你可以先升级到Blaze计划(有免费额度,正常测试用量不会产生费用)再测试。
- 核对安卓端签名配置:
- 把你调试环境、正式环境的SHA1、SHA256证书指纹全部录入Firebase控制台的安卓应用配置中
- 重新下载
google-services.json文件,替换到安卓项目的/app目录下,完全清理编译缓存后重新打包运行
- 确认手机号输入格式:调用
verifyPhoneNumber时传入的手机号必须带国家码前缀,例如中国手机号需要写成+8613xxxxxxxxx,格式错误会导致Firebase识别失败,无法下发短信。你可以先硬编码一个符合格式的真实非测试手机号验证,排除输入问题。 - 补全配置和缺失逻辑:
- 在
AndroidManifest.xml中添加短信相关权限:<uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> - 调用
verifyPhoneNumber时指定区域参数,解决日志中的X-Firebase-Locale为空警告,例如:await FirebaseAuth.instance.setLanguageCode("zh-CN"); // 再调用verifyPhoneNumber方法 - 检查Firebase控制台身份验证的设置页,确认电话验证开关已开启,且没有限制你当前测试手机号所属的国家/地区发送权限。
- 在
- 排查代码冗余问题:你给出的代码中
Main.dart和loginPage.dart存在完全重复的LoginScreen类,确认实际运行的代码没有逻辑冲突即可,该问题不影响短信下发。
内容的提问来源于stack exchange,提问作者J.Koriya
相关产品推荐
相关产品推荐

