React Native 0.64.2搭配Firebase 9.0.0-beta.8无法连接Cloud Firestore求助
解决方案
1. 版本兼容修复
你当前使用的Firebase 9.0.0-beta.8属于测试版本,WebChannel传输报错是该版本的已知React Native Android端兼容缺陷,优先处理版本问题:
- 降级到
8.10.0稳定版,或升级到9.1.0及以上正式版即可解决beta版本自带的适配问题 - 避免使用beta版本用于开发,大量未修复的兼容问题会增加排查成本
2. 模拟器网络配置修正
Android模拟器默认的网络配置经常会出现连接云服务异常的问题,按以下步骤排查:
- 进入模拟器设置→网络,关闭代理配置,避免Windows系统代理被模拟器自动继承导致连接拦截
- 关闭模拟器后执行
adb kill-server && adb start-server,再冷启动模拟器(不要用快照恢复启动,避免网络缓存问题) - 确认项目
android/app/src/main/AndroidManifest.xml中已添加必要的网络权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3. Firestore初始化配置调整
你单独开启experimentalForceLongPolling无法在React Native环境生效,需要搭配禁用Fetch Stream配置,调整Firestore初始化代码:
import { initializeFirestore } from "firebase/firestore"; const db = initializeFirestore(app, { experimentalForceLongPolling: true, useFetchStreams: false, });
4. 代码逻辑优化
现有代码中setDoc没有添加异常捕获,会触发未处理的Promise rejection警告,调整为async/await写法统一捕获异常:
const usersRef = collection(db, "users") const onSignUp = async () => { if(!isSelectedSoft) return try { await createUserWithEmailAndPassword(auth, email, password) await setDoc(doc(usersRef, auth.currentUser.uid), { email, pseudo, mood: "soft", gender, age, country }) } catch (error) { console.log(error); } };
5. 快速验证方案
优先使用实体Android设备连接调试,如果实体设备可以正常写入Firestore,即可确定是模拟器配置问题,无需额外排查项目代码和Firebase服务配置。
内容的提问来源于stack exchange,提问作者Dimitri Enj
相关产品推荐
相关产品推荐

