You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中Firebase短信验证码请求失败(错误码17499/39)求助

Flutter Firebase短信验证码请求失败(错误码17499/39)问题排查与解决

问题描述

完成reCAPTCHA验证后,Flutter应用触发Firebase短信验证码请求失败,日志报错:

E/FirebaseAuth(22392): [SmsRetrieverHelper] SMS verification code request failed: unknown status code: 17499 Error code:39

环境信息:

  • Flutter版本:3.13.0 stable
  • Gradle版本:8.0.2
  • 已排查配置文件:Debug/AndroidManifest.xml、Main入口代码、pubspec.yaml、google-services.json、android/build.gradle、app/build.gradle
  • 已尝试操作:更换真机/模拟器、不同手机号、调整插件版本,参考Stackoverflow/GitHub/Reddit方案均无效

排查与解决步骤

1. 补全SmsRetriever API配置

  • 确保AndroidManifest.xml中添加SmsRetriever广播接收器:
    <receiver
        android:name="com.google.android.gms.auth.api.phone.SmsRetriever"
        android:exported="true">
        <intent-filter>
            <action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED" />
        </intent-filter>
    </receiver>
    
  • 生成并添加签名哈希到Firebase控制台:
    执行以下命令生成debug签名哈希(替换keystore路径和别名):
    keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | xxd -p | tr -d "[:space:]" | echo -n com.your.package.name `cat` | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11
    
    将生成的哈希值添加到Firebase控制台「项目设置→应用→SHA证书指纹」中。

2. 校验google-services.json有效性

  • 确认文件是从Firebase控制台对应应用下载的,包名与AndroidManifest.xml的package字段完全一致。
  • 检查文件中client/api_key/current_key是否有效,无过期或权限限制。

3. 统一Firebase插件版本适配

  • 在pubspec.yaml中锁定兼容Flutter 3.13.0的稳定版本:
    dependencies:
      firebase_core: ^2.24.2
      firebase_auth: ^4.12.0
    
  • 清理项目缓存:
    flutter clean
    cd android && ./gradlew clean
    

4. 调整Gradle依赖与配置

  • 在android/build.gradle中确保Google服务版本匹配:
    dependencies {
        classpath 'com.google.gms:google-services:4.4.0'
        classpath 'com.android.tools.build:gradle:8.0.2'
    }
    
  • 在app/build.gradle中设置最低SDK版本要求:
    android {
        compileSdkVersion 33
    
        defaultConfig {
            targetSdkVersion 33
        }
    }
    

5. 修正reCAPTCHA验证流程

  • 确保reCAPTCHA验证后正确传递凭证到手机号验证请求:
    final recaptchaVerifier = RecaptchaVerifier(
      container: null,
      size: RecaptchaVerifierSize.compact,
      theme: RecaptchaVerifierTheme.light,
    );
    
    await FirebaseAuth.instance.verifyPhoneNumber(
      phoneNumber: '+xxxxx',
      verificationCompleted: (PhoneAuthCredential credential) {},
      verificationFailed: (FirebaseAuthException e) {
        print(e.message);
      },
      codeSent: (String verificationId, int? resendToken) {},
      codeAutoRetrievalTimeout: (String verificationId) {},
      forceResendingToken: null,
      timeout: const Duration(seconds: 60),
      recaptchaVerifier: recaptchaVerifier,
    );
    
  • 非Web环境下将reCAPTCHA的container设为null,避免平台适配冲突。

6. 检查Firebase项目权限与配额

  • 登录Firebase控制台,确认Auth规则允许手机号验证的访问权限。
  • 查看「使用情况」面板,确认短信验证未触发配额限制。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:52:44