Firebase 电话身份验证未发送带有代码的短信

Posted

技术标签:

【中文标题】Firebase 电话身份验证未发送带有代码的短信【英文标题】:Firebase Phone Auth isn't sending SMS with code 【发布时间】:2019-08-23 05:42:17 【问题描述】:

我正在尝试使用 Firebase 为我的 android 应用设置电话号码身份验证。我在 Firebase 控制台的“身份验证”选项卡上启用了电话身份验证,并添加了我的号码进行测试。我尝试了多个号码,但尽管控制台告诉我 PhoneCodeSent 函数已触发并显示成功消息,但我没有收到任何短信。我已经尝试修复它一段时间,但似乎无法找到可靠的答案。我的代码有什么问题?

我的代码如下

...
...
...
String verificationId;
int resendingToken;

Future<void> _sendConfirmationCode() async 
if (formKey.currentState.validate()) 
  formKey.currentState.save();

  final PhoneVerificationCompleted verificationCompleted = (FirebaseUser user) 
    setState(() 
      print('verification has been completed');
    );
  ;

  final PhoneVerificationFailed verificationFailed = (AuthException authException) 
    setState(() 
      print(countrySelected);
      print(this.phone + "\n");
      print('verification failed error: ' + authException.message);
    );
  ;

  final PhoneCodeSent codeSent = (String verificationId, [int forceResendingToken]) async 
    this.verificationId = await verificationId;
    this.resendingToken = await forceResendingToken;
    print("code sent: "+ verificationId);
  ;

  final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
      (String verificationId) 
    this.verificationId = verificationId;
    print("time out");
  ;

  if (this.phone.isNotEmpty) 

    await FirebaseAuth.instance.verifyPhoneNumber(
      phoneNumber: "<PHONE NUMBER HARDCODED HERE>", //I've tried hardcoding my number too but it didn't work
      timeout: const Duration(seconds: 5),
      verificationCompleted: verificationCompleted,
      verificationFailed: verificationFailed,
      codeSent: codeSent,
      forceResendingToken: resendingToken,
      codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);
  
 

以下内容被打印到控制台:

I/flutter (32425): code sent: AM5PThC4JnFK7czWDoAdqSFjBdDk5oq9VwufNvWxgcOg4fEgbHE8CoYGuWMCjzTnfPbOlpcdfefouwL86dsD5fQs73CcR3NgvI2SRqHEHgM0n34yqqJma75ZCvPGMeTmwy6XDCA9-P0p
I/flutter (32425): time out

我也尝试过等待几个小时,以防达到 Firebase 的 SMS 限制,但这似乎不是问题。有什么想法吗?

【问题讨论】:

你的号码格式有效吗? 您是否在号码前添加了国家代码 @MuhaiminurRahman 是的,我已经添加了国家代码,我已经检查了所有内容的三倍,我已经尝试对电话号码进行硬编码,并且正在触发 PhoneCodeSent 回调。我什至尝试对格式错误的数字进行硬编码,以查看它是否仍会触发回调,但出现错误,因此这不是格式问题。我还尝试了这个演示fir-ui-demo-84a6c.firebaseapp.com,看看我的电话运营商是否有问题,但它工作得很好。我仍然坚持这一点。 你试过增加timeout吗?类似const Duration(seconds: 60) 您可以检查从 Firebase 删除用户like this 【参考方案1】:

当您添加一个电话号码进行测试时,基本上就是将其列入白名单。列入白名单的电话号码用于测试电话号码身份验证,而不发送实际的 SMS 消息。

不会向列入白名单的电话号码发送验证码 SMS,默认 OTP 为 123456(除非您在添加到测试控制台时提供了该特定号码的 6 位数验证码)。尝试使用此代码进行验证,它将进行身份验证并生成有效的验证 ID。

要获取短信,请将您的号码从白名单中删除,然后重试。

参考:https://firebase.google.com/docs/auth/android/phone-auth#test-with-whitelisted-phone-numbers

【讨论】:

谢谢这真的很有帮助,我试过了,它成功地验证了电话号码和验证码。但是,我仍然想测试 Firebase 向我发送真正的短信。我按照您的建议从“身份验证”小节的“用户”选项卡中删除了该号码,并收到以下消息。 “此应用无权使用 Firebase 身份验证。请确认在 Firebase 控制台中配置了正确的包名称和 SHA-1。” 我已检查并正确配置了 SHA-1 签名,有什么想法吗? @MarcoFregoso 尝试转到console.cloud.google.com 并检查Identity Toolkit API 是否被勾选(如果密钥被限制)。 嘿@Vineet,我就是这么做的,但我什么也收不到!! - 在“调试”测试模式下,您知道我们编写了一个测试验证代码,它运行良好,但在我为商店发布我的应用程序后,我无法收到任何短信所以我应该做些什么也许我忘记了吗? @MarcoFregoso 你得到解决方案了吗?我也面临同样的问题!

以上是关于Firebase 电话身份验证未发送带有代码的短信的主要内容,如果未能解决你的问题,请参考以下文章

在 Firebase 电话身份验证中未接收代码。

如何在angular4的firebase电话身份验证中重新发送短信验证?

Flutter + Firebase Auth:有啥方法可以在 Web 上使用 Firebase 电话身份验证重新发送短信验证码?

React 本机 firebase 电话号码身份验证在发送短信之前打开 safari。糟糕的用户体验

firebase 的短信代码不匹配

使用带有 android firebase 短信认证的模拟器