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

Flutter Android端Firebase Auth模拟器登录出现空reCAPTCHA令牌错误

Firebase Auth模拟器登录时出现空reCAPTCHA令牌及网络错误的解决方案

以下是针对你遇到问题的具体排查和解决步骤:

1. 确认模拟器配置的执行时机

必须在任何Firebase Auth操作(包括自动登录、获取当前用户等)之前调用useAuthEmulator。如果代码中有提前触发Auth操作的逻辑(比如启动时自动登录),会导致模拟器配置未生效,客户端仍走生产环境流程,进而触发reCAPTCHA验证。

检查代码流程,确保useAuthEmulator调用在signInWithEmailAndPassword、currentUser等操作之前执行。

2. 验证Android模拟器与本地模拟器的连通性

虽然你使用了10.0.2.2(Android模拟器访问本地主机的默认地址),但仍需确认网络连通:

  • 在Android模拟器中打开浏览器,访问http://10.0.2.2:9099,如果能看到Firebase Auth模拟器的欢迎页面,说明网络连通正常;
  • 如果无法访问,检查电脑防火墙是否允许9099端口的入站连接,或者重启Android模拟器和Firebase模拟器套件。

3. 禁用App Check或配置调试模式

如果项目启用了Firebase App Check,即使在模拟器环境下,客户端可能会强制触发reCAPTCHA验证,但Auth模拟器不需要此验证。解决方法:

  • 在初始化Auth模拟器前,添加代码禁用App Check(仅调试环境):
if (useEmulator) {
  // 禁用App Check
  await FirebaseAppCheck.instance.setTokenProviderFactory(
    DebugAppCheckTokenProviderFactory(),
  );
  // 再配置Auth模拟器
  String host = Platform.isAndroid ? '10.0.2.2' : 'localhost';
  await FirebaseAuth.instance.useAuthEmulator(host, 9099);
}
  • 或者在Firebase控制台的App Check设置中,为调试设备添加允许列表,避免触发reCAPTCHA。

4. 重置应用状态并重启

Flutter热重载可能导致模拟器配置未正确生效,尝试:

  • 完全关闭应用(杀死进程)后重新打开;
  • 清除应用的存储缓存(在Android设置中找到应用,清除数据);
  • 重启Flutter运行环境,重新构建项目。

5. 检查Firebase CLI和模拟器版本兼容性

旧版本的Firebase模拟器可能与你使用的Flutter Firebase SDK(适配Flutter 3.27.1)不兼容,导致配置失效:

  • 运行firebase --version查看当前CLI版本,若不是最新版,执行npm install -g firebase-tools更新;
  • 更新后,重新启动Firebase模拟器套件:firebase emulators:start。

6. 验证模拟器配置是否生效

添加调试日志,确认Auth客户端已切换到模拟器地址:

if (useEmulator) {
  String host = Platform.isAndroid ? '10.0.2.2' : 'localhost';
  await FirebaseAuth.instance.useAuthEmulator(host, 9099);
  if (kDebugMode) {
    print("Auth模拟器已配置为:$host:9099");
    // 检查Auth端点是否指向模拟器
    print("当前Auth端点:${FirebaseAuth.instance.app.options.authDomain}");
  }
}

如果打印的authDomain仍然是生产环境的地址(如your-project.firebaseapp.com),说明配置未生效,需重新检查初始化流程。

7. 确认Android网络权限配置

确保AndroidManifest.xml中包含必要的网络权限,且允许明文流量:

<!-- 添加网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    ...
    android:usesCleartextTraffic="true"> <!-- 允许明文流量 -->
    ...
</application>

内容的提问来源于stack exchange,提问作者aanas.sayed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:14:55