我正在开发一个使用Firebase电话号码认证(SMS OTP)的flutter应用程序。 它在Android上运行良好,但在iPhone上存在问题。 我正在用一个真正的装置进行测试。 安装应用程序后,我可以多次使用该电话号码登录。 但过了一段时间,我无法用同一个手机号码登录,它要求我检查号码是否正确。 sim卡与我正在测试的手机相同。 当调试时,电话登录在模拟器或真实设备中不工作,因此我很难解决这个问题。 以前有人经历过这种怪异的行为吗? 我使用的是Flutter1.12.13+Hotfix9和Firebase_auth0.15.3+1版本。 如有任何帮助,我们将不胜感激。 谢谢。
_verifyPhoneNumber(BuildContext context) async {
final FirebaseAuth _auth = FirebaseAuth.instance;
await _auth.verifyPhoneNumber(
phoneNumber: phoneNumber,
timeout: Duration(seconds: 0),
verificationCompleted: (authCredential) =>
_verificationComplete(authCredential, context),
verificationFailed: (authException) =>
_verificationFailed(authException, context),
codeAutoRetrievalTimeout: (verificationId) =>
_codeAutoRetrievalTimeout(verificationId),
// called when the SMS code is sent
codeSent: (verificationId, [code]) =>
_smsCodeSent(verificationId, [code])); }
_verificationComplete(AuthCredential authCredential, BuildContext context) {
FirebaseAuth.instance.signInWithCredential(authCredential);
if (!smsCodeSent) handleLogin(authCredential);}
_verificationFailed(AuthException authException, BuildContext context) {
showDialog(
context: context,
builder: (_) => AnimatedDialog(), // SHows diaglog box with check your number error message);}
_smsCodeSent(String verificationId, List<int> code) {
smsCodeSent = true;
_smsVerificationCode = verificationId;
smsOTPDialog(context) }
_codeAutoRetrievalTimeout(String verificationId) {
// set the verification code so that we can use it to log the user in
_smsVerificationCode = verificationId;}
smsOTPDialog(BuildContext context) {
Navigator.of(context).push(
_createRoute(userPhoneNumber, _smsVerificationCode, _fullname.text));}
您应该在电话身份验证签名方法中获得您的号码设置,作为测试电话号码。 当FireBaseAuth检测到您的电话号码重复呼叫服务时,它将阻止您的电话号码使用服务。 他们把它打上标记然后封锁了将近4个小时。 电话认证的速率限制为每个电话号码每小时约5次呼叫。
试试看。