Firestore(9.1.3) WebChannel传输错误 浏览器正常但iOS/安卓移动端无法写入
Firebase v9移动端Firestore写入失败修复方案
该错误核心原因为Firestore v9.1.3版本默认的WebChannel传输协议在移动端浏览器、App内嵌Webview环境下存在兼容性缺陷,或是被移动运营商的网络代理策略拦截,导致无法和Firebase服务器建立连接,桌面端网络环境没有这类限制所以运行正常,可按以下方案逐一排查修复:
- 方案1:强制Firestore使用长轮询传输模式,规避WebChannel的兼容性问题
替换原有Firestore初始化逻辑,改用initializeFirestore方法传入自定义配置,修改后的代码如下:import { initializeApp } from 'firebase/app' import { initializeFirestore, doc, setDoc } from "firebase/firestore" const app = initializeApp(config) // 替换原有getFirestore,强制开启长轮询 const db = initializeFirestore(app, { experimentalForceLongPolling: true, }); const MyComponent = () => { ... useEffect(() => { (async function zda() { try { await setDoc(doc(db, "users", "mario"), { employment: "plumber", outfitColor: "red", specialAttack: "fireball" }) } catch (e) { // 建议添加错误捕获便于定位问题 console.error("写入失败: ", e) } })() }, []) - 方案2:升级Firebase依赖版本
你当前使用的9.1.3是早期v9版本,存在移动端WebChannel的官方已知bug,直接将firebase依赖升级到v9.23.0及以上的稳定版本即可修复该问题。 - 方案3:排查移动端环境限制
- 校验移动端系统时间是否和标准时间误差在5分钟以内,Firebase身份令牌校验对客户端时间有严格要求,时间误差过大会导致连接被拒绝
- 如果你是在App内嵌Webview中运行该代码,检查Webview的内容安全策略(CSP)配置,确保已放行
*.googleapis.com、*.firebaseio.com等Firebase相关域名的访问权限 - 测试移动端切换不同网络(如WiFi切移动数据)是否可恢复写入,排除当前网络的代理、防火墙拦截规则影响
内容的提问来源于stack exchange,提问作者Orhan Eroglu
相关产品推荐
相关产品推荐

