首页 > 解决方案 > 无法将 React Native 应用程序连接到 Firestore 模拟器

问题描述

我已经尝试了 Stack Overflow 及其他方面的几乎所有解决方案,但仍然出现错误。我已经设置并确认模拟器运行良好。但是,尝试将 react 本机应用程序连接到它会返回错误:

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);

我什至替换localhost0.0.0.0,同样的错误。

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

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

我试过了,但仍然遇到同样的错误。

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

标签: reactjsfirebasegoogle-cloud-firestorefirebase-tools

解决方案


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

我将引用 Firebase 版本 9,因为它是应该使用的版本,如果您仍想使用版本 8,我将留下您可以选择使用哪个版本的参考。

检测您的应用程序以与模拟器对话

设置应用内配置或测试类以与 Cloud Firestore 交互,如下所示。

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

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

当您初始化 Firebase时 ,您需要在使用 npm 安装 firebase 后这样做。

 const app = initializeApp(firebaseConfig);

和...

初始化 Cloud Firestore

初始化 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);

推荐阅读