Flutter Firebase Phone Auth无法发送短信验证码求助
Flutter Firebase Phone Auth 无法接收短信验证码排查方案
以下是针对「跳转OTP页面正常但收不到短信验证码」问题的排查步骤和代码优化建议:
核心排查点
- 检查Firebase测试号码白名单:进入Firebase控制台→Authentication→Sign-in method→Phone,查看「测试号码」列表,若你的测试手机号在列表中,移除后再尝试接收真实短信(测试号码只会返回模拟验证码,不会发送实际短信)。
- 确认项目计费状态:Firebase Phone Auth仅在Blaze付费计划下支持真实短信发送,Spark免费计划仅允许使用测试号码。检查项目的计费页面,确保未降级为免费计划或配额未耗尽。
- 验证Play Integrity配置完整性:
- 确认应用包名与Firebase控制台中注册的完全一致;
- 确保Play Integrity的API密钥已正确关联到Firebase项目;
- 测试设备需安装最新版Google Play服务,且已登录有效Google账号(Play Integrity依赖该服务验证设备合法性)。
- 校验手机号格式:确保传入
phoneNumber参数为国际标准格式(如+8613xxxxxxxxx),禁止省略国家码或使用本地格式,可在代码中添加格式校验逻辑避免错误。 - 查看错误日志:
- 前往Firebase控制台→Authentication→日志,查看短信发送请求的失败记录,获取具体错误码(如配额不足、号码无效等);
- 在测试设备上通过Logcat(Android)或控制台(iOS)搜索
FirebaseAuth相关日志,排查verificationFailed回调是否有未捕获的错误信息。
代码优化建议
当前代码的错误处理可进一步细化,便于快速定位问题类型,修改verificationFailed回调如下:
verificationFailed: (FirebaseAuthException error) { String errorMsg; switch(error.code) { case 'invalid-phone-number': errorMsg = "手机号格式不正确"; break; case 'quota-exceeded': errorMsg = "短信发送配额已耗尽"; break; case 'operation-not-allowed': errorMsg = "Phone Auth功能未启用"; break; case 'missing-play-integrity-token': errorMsg = "Play Integrity验证失败"; break; default: errorMsg = "验证失败:${error.message}"; } Fluttertoast.showToast( msg: errorMsg, backgroundColor: Colors.red, textColor: Colors.black ); print("[Firebase Auth Error] ${error.code}: ${error.message}"); },
内容的提问来源于stack exchange,提问作者Eben Oasis
相关产品推荐
相关产品推荐

