You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Firebase手机认证自动登录失败(超时)问题求助

解决Firebase Auth手机号自动登录(短信自动检索)超时问题

你遇到的SmsRetrieverHelper Timed out waiting for SMS错误,通常是因为短信格式不符合要求、缺少SmsRetriever监听配置,或者应用哈希配置错误导致的。下面一步步帮你排查解决:

1. 确保短信包含应用的哈希字符串(核心要求)

Firebase的SmsRetriever API只能识别包含应用专属哈希字符串的短信,这是自动检索的必要条件。短信格式必须类似:

Your verification code is 123456

FA+9qCX9VSu

  • 第二行的FA+9qCX9VSu就是你的应用哈希,必须准确无误地出现在短信末尾(可以单独一行,也可以跟在验证码后面,但必须完整)。
  • 如果你的短信模板没有包含这个哈希,SmsRetriever根本无法识别这条短信,自然会触发超时。

2. 正确生成并配置应用哈希

应用哈希和你的签名文件(debug/release)绑定,不同签名生成的哈希不同,必须对应添加到Firebase控制台:

生成debug签名哈希(开发环境)

打开终端执行以下命令(替换为你的包名):

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | xxd -p | tr -d "[:space:]" | echo -n com.your.app.package `cat` | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11
  • 默认debug keystore密码是android,如果你的自定义了签名,替换对应的alias和keystore路径。

配置到Firebase控制台

  1. 打开Firebase控制台,进入你的项目
  2. 导航到Authentication > 登录方法 > 电话
  3. Android应用哈希区域,添加你生成的哈希字符串

3. 添加SmsRetriever监听代码

你的现有代码只调用了PhoneAuthProvider.verifyPhoneNumber,但缺少SmsRetriever的监听启动。需要在发送验证码之前,初始化并启动SmsRetrieverClient:

修改你的verificationPassed()方法,在构建PhoneAuthOptions之前添加以下代码:

// 初始化SmsRetriever客户端
SmsRetrieverClient smsRetrieverClient = SmsRetriever.getClient(AuthActivity.this);

// 启动短信检索监听
Task<Void> retrieverTask = smsRetrieverClient.startSmsRetriever();
retrieverTask.addOnSuccessListener(aVoid -> {
    // 监听启动成功,现在可以发送验证码了
    Log.d(TAG, "SmsRetriever监听已启动");
});

retrieverTask.addOnFailureListener(e -> {
    Log.w(TAG, "SmsRetriever监听启动失败: " + e.getMessage());
    FancyToast.makeText(AuthActivity.this, "自动验证功能无法启用,请手动输入验证码", FancyToast.LENGTH_SHORT, FancyToast.WARNING, false).show();
});

4. 检查其他潜在问题

  • 签名一致性:确保你测试用的APK签名和生成哈希时用的签名一致(debug包用debug签名,release包用release签名),否则哈希不匹配,SmsRetriever无法识别。
  • 网络权限:确保AndroidManifest.xml中添加了<uses-permission android:name="android.permission.INTERNET" />,Firebase需要网络通信来验证哈希和短信。
  • Android版本兼容:SmsRetriever API支持Android 6.0(API 23)及以上版本,如果你的测试设备低于这个版本,自动检索功能本身就不支持,会触发超时。

验证修改

完成上述配置后,重新发送验证码:

  1. 检查收到的短信是否包含正确的应用哈希
  2. 查看日志是否还有超时错误
  3. 如果一切正常,onVerificationCompleted方法会被自动触发,填充OTP并完成自动登录

内容的提问来源于stack exchange,提问作者4xMafole

火山引擎 最新活动