无法将 React Native 应用程序连接到 Firestore 模拟器

Unable to connect React Native app to Firestore emulator

我已经尝试了 Stack Overflow 及以后的几乎所有解决方案,但仍然出现错误。 我已经设置并确认模拟器运行正常。但是,尝试将 React Native 应用程序连接到它 returns 错误:

Could not reach Cloud Firestore backend. Connection failed 1 times...

接着是一堆这样的警告:

Connnection Webchannel transport errored .

这是我的配置信息

import * as firebase from 'firebase';
import { initializeApp } from "firebase/app";
import firestore from 'firebase/firestore';

const firebaseConfig = {
  apiKey: "ZZZZ",
  authDomain: "ZZZZ",
  projectId: "ZZZZ",
  storageBucket: "ZZZZ",
  messagingSenderId: "ZZZZ",
  appId: "ZZZ",
  measurementId: "ZZZ"
};


firebase.initializeApp(firebaseConfig);
firebase.firestore().useEmulator("localhost", 8080);

我什至用0.0.0.0替换了localhost,同样的错误。

有人建议将最后一行更改为

firebase.firestore().settings({
    host: "localhost:8080",
    ssl: false
  });

我试过了,但仍然出现同样的错误。

请问正确的、经过验证的方法是什么?我真的很感激,因为我想花几个小时在这上面!

恐怕您没有正确导入 firestore,也没有以适当的方式初始化模拟器。您正在正确导入 Firebase 函数,但有几处需要更改。

我将参考 Firebase 版本 9,因为它是应该使用的版本,如果您仍想使用版本 8,我将留下参考资料供您选择要使用的版本。

Instrument your app to talk to the emulators

Set up your in-app configuration or test classes to interact with Cloud Firestore as follows.

import { `getFirestore`, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, 'localhost', 8080);

当你 initialize Firebase 使用 npm 安装 firebase 后,你需要这样做。

 const app = initializeApp(firebaseConfig);

和...

Initialize Cloud Firestore

Initialize an instance of Cloud Firestore:

import  { initializeApp }  from  "firebase/app"  
import  { getFirestore }  from  "firebase/firestore"  
   
const firebaseApp = initializeApp({ 
    apiKey:  '### FIREBASE API KEY ###', 
    authDomain:  '### FIREBASE AUTH DOMAIN ###', 
    projectId:  '### CLOUD FIRESTORE PROJECT ID ###'  
});  

const db = getFirestore();

最后你的文件应该是这样的:

import { initializeApp } from "firebase/app";
import { getFirestore } from 'firebase/firestore';
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";


const firebaseConfig = {
  apiKey: "ZZZZ",
  authDomain: "ZZZZ",
  projectId: "ZZZZ",
  storageBucket: "ZZZZ",
  messagingSenderId: "ZZZZ",
  appId: "ZZZ",
  measurementId: "ZZZ"
};


const app  = initializeApp(firebaseConfig);
const db = getFirestore();
connectFirestoreEmulator(db, 'localhost', 8080);