通过 Firebase 访问 Firestore 超时(React Native 应用程序)

Posted

技术标签:

【中文标题】通过 Firebase 访问 Firestore 超时(React Native 应用程序)【英文标题】:Firestore access via Firebase times out (React Native app) 【发布时间】:2021-09-18 10:57:45 【问题描述】:

我有一个使用 Expo 构建的 React Native 应用程序。在启动时,它连接到 Firestore 并尝试从特定集合中加载 3 个文档。碰巧的是,目前该收藏暂时没有安全限制。在 Expo 仿真环境中或者当我使用 Expo 的构建来创建应用的 APK 时,应用的话很棒。

这就是问题所在。我使用expo run:android 命令导出代码,构建并安装了应用程序,并尝试在模拟器或Android 手机(通过WiFi 或USB)上运行它。在这些情况下,当应用启动时,它会收到以下错误:

@firebase/firestore:Firestore (8.7.0):无法访问 Cloud Firestore 后端。后端在 10 秒内没有响应。 这通常表明您的设备目前没有健康的互联网连接。客户端将在离线模式下运行,直到能够成功连接到后端。

为了进一步解决这个问题,我在网站上插入了一个 fetch(使用 node-fetch),只是为了做一个 GET 请求。我在第一个 Firestore 代码之前就这样做了。它在所有这些环境中都成功,所以我确信这不是网络连接问题。我的 Firebase 应用程序配置、应用程序的身份或其他在安全级别上阻止此操作或需要在设备上进行配置才能使 Firestore 访问正常工作的东西一定有某些内容。

我应该探索什么?有没有我可以提供的诊断细节来帮助解决这个问题?如果您好奇,这些是 npm 版本。

    "@expo/vector-icons": "^12.0.0",
    "@react-native-async-storage/async-storage": "~1.15.0",
    "@react-native-community/masked-view": "0.1.10",
    "@react-native-community/slider": "3.0.3",
    "@react-navigation/bottom-tabs": "5.11.2",
    "@react-navigation/drawer": "^5.12.5",
    "@react-navigation/native": "~5.8.10",
    "@react-navigation/stack": "~5.12.8",
    "diff-match-patch": "^1.0.5",
    "diff-match-patch-line-and-unicode-aware-word": "^0.2.2",
    "eslint": "^7.23.0",
    "expo": "^42.0.0",
    "expo-asset": "~8.3.2",
    "expo-av": "~9.2.3",
    "expo-constants": "~11.0.1",
    "expo-font": "~9.2.1",
    "expo-intent-launcher": "~9.1.0",
    "expo-linking": "~2.3.1",
    "expo-localization": "~10.2.0",
    "expo-network": "~3.2.0",
    "expo-permissions": "~12.1.1",
    "expo-splash-screen": "~0.11.2",
    "expo-status-bar": "~1.0.4",
    "expo-web-browser": "~9.2.0",
    "firebase": "^8.7.0",
    "git": "^0.1.5",
    "i18n-js": "^3.8.0",
    "install": "^0.13.0",
    "lodash": "^4.17.21",
    "moment": "^2.29.1",
    "npm": "^7.6.3",
    "react": "16.13.1",
    "react-dom": "16.13.1",
    "react-native": "~0.63.4",
    "react-native-gesture-handler": "~1.10.2",
    "react-native-material-menu": "^1.2.0",
    "react-native-popup-menu": "^0.15.10",
    "react-native-progress": "^4.1.2",
    "react-native-safe-area-context": "3.2.0",
    "react-native-screens": "~3.4.0",
    "react-native-tiny-toast": "^1.0.7",
    "react-native-web": "~0.13.12",
    "react-native-webview": "11.6.2",
    "expo-updates": "~0.8.0",
    "react-native-reanimated": "~2.2.0",
    "react-native-unimodules": "~0.14.3"

【问题讨论】:

尝试阅读android studio日志,也许你有更多线索 我挖掘了日志。与执行无关,构建警告都与 gradle 设置有关。我尝试调整这些(基于在线建议),但没有。该应用程序显然可以构建和运行,但 Firestore 访问令人窒息。 【参考方案1】:

我向a related question 找到了很多有用的建议,其中包括尝试长轮询的建议。

firebase.firestore().settings(experimentalForceLongPolling: true)

我也尝试使用以下方法,但效果不佳。

firebase.firestore().settings(experimentalAutoDetectLongPolling: true, merge: true)

您可以在 [Firebase Firestore 文档中找到有关这两个 settings 的更多信息。

【讨论】:

以上是关于通过 Firebase 访问 Firestore 超时(React Native 应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase Firestore 访问特定用户的信息? [关闭]

@firebase/firestore:Firestore (8.6.5):无法访问 Cloud Firestore 后端

@firebase/firestore:Firestore (8.6.2):无法访问 Cloud Firestore 后端(React Js)

@firebase/firestore:Firestore (5.0.4):无法访问 Cloud Firestore 后端。后端在 10 秒内没有响应

Firebase Firestore:无法访问Firestore后端(仅限Android)

Flutter / Firestore - 如何访问 Firebase 上的嵌套元素?