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

Firebase模拟器仍用真实账户,Android正常iOS异常求助

问题分析与解决方案

核心问题:你的代码虽调用了useAuthEmulator,但iOS端因网络权限限制或初始化配置隐性问题,未成功连接到Auth模拟器,最终仍请求了真实Firebase项目的Auth服务,导致真实项目中已存在的邮箱被提示占用。

具体排查与修复步骤

1. 修复iOS网络访问限制

Firebase Auth模拟器使用HTTP协议,iOS默认阻止非HTTPS请求,需在iOS项目的Info.plist中添加配置允许本地访问:
打开ios/Runner/Info.plist,插入以下内容:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsLocalNetworking</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>localhost</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

2. 调整模拟器连接地址

iOS部分环境对localhost解析存在问题,将代码中的模拟器地址替换为127.0.0.1:

FirebaseAuth.instance.useAuthEmulator('127.0.0.1', 9099);

3. 匹配开发环境的Firebase配置

当前DefaultFirebaseOptions.currentPlatform指向真实项目,建议为开发环境单独生成对应配置:

  1. 执行Firebase CLI命令生成开发项目(vepo-dev-e5b8a)的配置:
    flutterfire configure --project=vepo-dev-e5b8a
    
  2. 在main_development.json的初始化代码中,使用生成的开发版DefaultFirebaseOptions,替换真实项目配置。

4. 确认Auth实例的初始化顺序

若使用了命名Firebase App,需确保针对对应实例调用模拟器配置:

final firebaseApp = await Firebase.initializeApp(
  name: Env.instance!.firebaseAppName,
  options: DefaultFirebaseOptions.currentPlatform,
);
// 针对命名App的Auth实例配置模拟器
FirebaseAuth.instanceFor(app: firebaseApp).useAuthEmulator('127.0.0.1', 9099);

验证方法

在注册代码前添加日志,确认Auth实例的连接状态:

print('Auth项目ID: ${FirebaseAuth.instance.app.options.projectId}');

若输出为vepo-dev-e5b8a,则说明配置已指向开发项目;若仍为真实项目ID,需检查初始化代码的配置引用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:13:12