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指向真实项目,建议为开发环境单独生成对应配置:
- 执行Firebase CLI命令生成开发项目(
vepo-dev-e5b8a)的配置:flutterfire configure --project=vepo-dev-e5b8a - 在
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
相关产品推荐
相关产品推荐

