Expo + firebase@9.0.1/9.0.0: @firebase/firestore:, Firestore (9.0.0): 无法到达 Cloud Firestore 后端

Posted

技术标签:

【中文标题】Expo + firebase@9.0.1/9.0.0: @firebase/firestore:, Firestore (9.0.0): 无法到达 Cloud Firestore 后端【英文标题】:Expo + firebase@9.0.1/9.0.0: @firebase/firestore:, Firestore (9.0.0): Could not reach Cloud Firestore backend 【发布时间】:2021-11-05 04:51:58 【问题描述】:

我刚刚将我的 Expo 移动应用程序从 firebase@9.0.0-beta.7 更新到 firebase@9.0.1 并遇到以下错误:@firebase/firestore: Firestore (9.0.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds

我正在使用 android studio 模拟器在 Expo Go 中运行移动应用程序。 在应用程序中,身份验证工作正常,因为我可以登录和注销用户,但是当我尝试使用 Firestore 执行某些操作时,出现以下错误:Failed to get document because the client is offline. 例如,这发生在基本的 getDoc() 函数中

const dbRef = doc(db, 'exampleColletion', 'id');
    await getDoc(dbRef).then(document => 
      const information = document.data();
      if (information !== undefined) 
        eventsRetreived(information);
      
    ).catch((err) => 
      eventsRetreived(err);
      console.log(err.message)
    )

我已经通过使用firebase@9.0.1firebase@9.0.0 进行了一些测试,但在这两种情况下我都面临同样的问题,但在firebase@9.0.0-beta.7 中一切正常(而且我没有更改任何代码,只更改版本火力基地)。

如果需要更多代码或信息,请告诉我需要添加什么,我会根据需要编辑这篇文章。

编辑 找到了相关的 github 问题,但即使已关闭,我在测试 firebase@9.0.2 后仍然面临该问题https://github.com/firebase/firebase-js-sdk/issues/5402

EDIT2 似乎问题出现在 Expo v. 42 中。目前 Expo 支持默认兼容版本的 Firebase,因此目前的解决方案是使用 firebase@9.0.0-beta.7 或 Expo 支持并通过 expo install firebase 安装的兼容版本/p>

【问题讨论】:

您是否尝试过使用Node.js SDK?您仍然会出现这些错误吗? @FaridShumbar 我有另一个 Expo 项目,其中包含使用 Firebase Admin Node.js SDK 的 Firebase 函数,它工作正常。该项目也使用firebase@9.0.1,调用Firestore时没有问题。 但是 .. 该项目使用 expo-web 并在 web 环境中使用 firebase@9.01(但仍以与移动项目相同的方式设置配置)。我不知道这是否会影响事情,只是提一下。 我在使用 Expo v. 42 时遇到了同样的问题。 @MaxFahl 很有趣。我们可能需要等到 expo v. 43 发布,在那里可以使用模块化 firebase 并且在等待使用“firebase@9.0.0-beta.7”或expo install firebase提供的兼容版本时 【参考方案1】:

我可以使用这个设置让它工作:

initializeFirestore(firebaseInstance.current, 
  // @ts-ignore
  useFetchStreams: false,
  cacheSizeBytes: 100000000,
)

似乎 ios 不想很好地使用 Fetch API,使用 useFetchStreams 回退到使用 XMLHttpRequest 代替,目前这似乎对我有用。我在火力基地9.0.2

【讨论】:

以上是关于Expo + firebase@9.0.1/9.0.0: @firebase/firestore:, Firestore (9.0.0): 无法到达 Cloud Firestore 后端的主要内容,如果未能解决你的问题,请参考以下文章

Expo大作战(二十三)--expo中expo kit 高级属性(没干货)

Expo SDK 需要 Expo 才能运行。似乎本机 Expo 模块不可用,并且此代码未在 Expo 上运行。我想生成apk

Expo大作战(二十七)--expo sdk api之Util(expo自带工具类),tackSnapshotAsync,Svg,SQLite

Expo大作战(十四)--expo中消息推送的实现

react-native / expo / expo-google-app-auth vs expo-google-sign-in

Expo大作战--expo如何使用Genymotion模拟器