react-native-firebase v21.6.1 Auth模拟器使用异常:调用创建用户接口时出现网络请求失败错误
我仔细看了你的问题:Firestore和Functions模拟器都能正常连接使用,唯独Auth模块调用createUserWithEmailAndPassword时抛出网络错误,而且模拟器连接状态显示成功——这个问题大概率是几个细节配置导致的,我给你梳理下解决思路:
1. 优先排查:Auth模拟器的useEmulator调用格式错误
注意看你的app.js代码,Firestore和Functions的useEmulator都是传入主机地址+端口号两个参数,但Auth模块你传的是完整的HTTP URL:
// 你的代码(错误格式) auth().useEmulator('http://localhost:9099');
而@react-native-firebase/auth的useEmulator方法参数格式和另外两个模块完全一致,需要分开传主机和端口,正确写法是:
// 修改后的代码 auth().useEmulator('localhost', 9099);
这个格式错误很容易被忽略——模拟器连接状态会显示成功,但实际发起用户创建请求时,会因为参数解析异常导致网络请求失败。
2. 验证iOS模拟器与Auth模拟器的网络连通性
iOS模拟器里的localhost理论上会映射到你的电脑主机,但偶尔会有网络隔离问题。你可以先在模拟器的Safari中访问 http://localhost:9099:
- 如果能看到Firebase Auth模拟器的欢迎页面,说明网络连通正常;
- 如果打不开,试试用你电脑的局域网IP地址代替
localhost(比如192.168.1.100),同时确保电脑防火墙没有拦截9099端口的请求。
3. 检查iOS ATS配置(非HTTPS请求限制)
iOS默认会阻止非HTTPS的网络请求,虽然localhost在ATS(App Transport Security)中默认允许,但开发构建的配置可能存在遗漏。你可以在app.json的ios.infoPlist中添加以下配置,确保允许本地网络请求:
"ios": { "infoPlist": { "NSAllowsLocalNetworking": true, "NSAppTransportSecurity": { "NSAllowsArbitraryLoads": false, "NSExceptionDomains": { "localhost": { "NSIncludesSubdomains": true, "NSAllowsArbitraryLoads": true } } } } }
添加完成后,重新运行npx expo run:ios生成新的开发构建。
4. 确认Auth模拟器的运行状态
最后再检查启动Firebase模拟器的终端输出,确认Auth模拟器处于running状态且监听9099端口。有时候可能因为端口冲突,模拟器UI显示连接成功但实际服务并未正常启动。
你可以先尝试修改Auth模拟器的调用格式,这个是最可能解决问题的点。如果还是不行,再逐步排查后面的配置项。
备注:内容来源于stack exchange,提问作者benwl

