Firebase Auth美国手机号验证报错:格式不正确问题求助
问题
在Flutter应用中使用Firebase Auth实现手机号验证功能,调用FirebaseAuth.instance.verifyPhoneNumber方法验证手机号时,持续收到如下错误:
flutter: +15555551234 flutter: sending otp to +15555551234 flutter: Auth failed: The format of the phone number provided is incorrect. Please enter the phone number in a format that can be parsed into E.164 format. E.164 phone numbers are written in the format [+][country code][subscriber number including area code].
使用的代码片段:
Future verifyPhone({ String? phoneNumber, required void Function(PhoneAuthCredential) verificationCompleted, required void Function(FirebaseAuthException) verificationFailed, required void Function(String, int?) codeSent, required void Function(String) codeAutoRetrievalTimeout, int? forceResendingToken, }) async { debugPrint('sending otp to $phoneNumber'); try { FirebaseAuth.instance.verifyPhoneNumber( phoneNumber: phoneNumber, verificationCompleted: verificationCompleted, verificationFailed: verificationFailed, codeSent: codeSent, codeAutoRetrievalTimeout: codeAutoRetrievalTimeout, forceResendingToken: forceResendingToken, ); } catch (e) { if (kDebugMode) { print(e); } } }
无论如何格式化美国手机号都会触发错误,但+91开头的手机号可正常运行。已采用E.164格式,想知道哪里操作有误?+15555551234是否为无效号码?
解决方案
- 测试号码有效性问题:
+15555551234不属于Firebase官方认可的测试号码。Firebase仅允许特定的555开头号码用于开发测试,比如官方文档中提到的+16505551234。普通的555号码无法通过Firebase的验证,建议更换为官方指定的测试号码,或者使用真实的美国手机号进行测试。 - 清理号码格式:确保传入的手机号没有隐藏的空格、全角字符或不可见符号。可以在调用
verifyPhoneNumber前添加格式清理逻辑:String? cleanedPhoneNumber = phoneNumber?.trim().replaceAll(RegExp(r'[^+\d]'), ''); // 确保以+开头 if (cleanedPhoneNumber != null && !cleanedPhoneNumber.startsWith('+')) { cleanedPhoneNumber = '+$cleanedPhoneNumber'; } - 检查Firebase项目配置:确认你的Firebase项目所在区域支持美国手机号验证。部分区域可能对特定国家的号码验证有访问限制,可在Firebase控制台的Auth设置中查看并调整区域配置。
- 升级依赖版本:旧版本的
firebase_auth插件可能存在号码解析的兼容性问题,尝试将依赖升级到最新稳定版后再次测试。
内容的提问来源于stack exchange,提问作者Binoy Babu
相关产品推荐
相关产品推荐

