我正在尝试使用 react-native-firebase 框架将 Firebase 集成到我的博览会应用程序中,当涉及到反应本机应用程序时,该框架比常规
firebase
包具有多个优势。
但是,我遇到了困难,因为说明说我必须将
GoogleService-Info.plist
添加到ios/[YOUR APP NAME]/GoogleService-Info.plist
,并且根据我的理解,expo应用程序没有ios文件夹。
我已经完蛋了还是有解决方案?
今天,您无法通过 expo 使用 Firebase React-Native sdk。这并不是根据以下计划进行的:https://expo.canny.io/feature-requests/p/full-native-firebase-integration。
所以你只能使用 Firebase 的 javascript sdk。
Cloud Firestore 是新的,对于离线和同步的 javascript sdk 来说会更好。
此线程的作者:Fresh Detached Expo + RNFirebase not running on Android 已设法使其与
Detached ExpoKit
一起工作 - 因此它不是完全弹出并保留了 expo 功能。
我已询问他采取的步骤,以便我们可以了解如何将某些内容添加到我们的文档中,以及可能是我们的 starter 应用程序的独立 ExpoKit 版本。
有关 ExpoKit 的信息,请参阅 expokit 分离文档。
正在进行中 --
https://blog.expo.io/using-firebase-in-expo-e13844061832
在 Expo 中使用 Firebase 以及我们计划如何将其添加到客户端 😁 我们非常高兴地宣布,我们将推出一套 Unimodules,让您可以轻松访问原生 Firebase 功能!最初您只能在独立的 ExpoKit 应用程序中使用它们。但随着时间的推移,我们将努力将这些添加到原版博览会中。
TL;博士
以下是模块,您现在需要分离才能添加它们:
还有TL;DR
这是一个样板:https://github.com/EvanBacon/expo-native-firebase
更新2021年2月12日
Guys expo 的 eas-build 现已公开。您可以添加自定义本机代码并使用react-native-firebase。这是 youtube 教程的链接。该视频很短并且非常容易理解。这是文档的链接
之前的回答
如果您使用移动配置使用Firebase,则它不起作用,但当我尝试网络配置时,它运行顺利。这是 youtube 教程。从
38:20
观看进行设置。
我设法获得了一套包含 redux、firestore 和 expo 的 React-Native 工作集。请参阅Github上的代码示例。
但是它会消耗离线持久性(请参阅https://github.com/firebase/firebase-js-sdk/issues/436)。因此,从我的角度来看,它会影响性能,因为我需要在线才能获得带有 firestore 和 react-native 的完整工作应用程序。
我已经成功添加了react-native-firebase包与expo,以下是步骤:
npx expo install @react-native-firebase/app @react-native-firebase/firestore
npx expo install expo-dev-client
然后执行android命令:
npx expo run:android
我已经在google firebase控制台中创建了android和ios应用程序,并下载了google-services.json文件和GoogleService-Info.plist文件并将它们添加到我的项目的根目录中。
配置了app.json,ios和android属性如下所示:
"ios": {
"supportsTablet": true,
"bundleIdentifier": "....",
"googleServicesFile": "./GoogleService-Info.plist"
},
"android": {
...
"package": "..",
"googleServicesFile": "./google-services.json"
},
...
"plugins": ["@react-native-firebase/app"]
然后在App.js中使用firestore,下面的代码可以参考:
import { initializeApp } from "@react-native-firebase/app";
import { getFirestore } from "@react-native-firebase/firestore";
import { StatusBar } from "expo-status-bar";
import { useEffect, useState } from "react";
import { StyleSheet, Text, View } from "react-native";
const firebaseConfig = {
apiKey: "..",
authDomain: "..",
projectId: "..",
storageBucket: "..",
messagingSenderId: "..",
appId: "..",
databaseURL: "",
};
const app = initializeApp(firebaseConfig);
export default function App() {
const [text, setText] = useState("Loading...");
useEffect(() => {
const fetchData = async () => {
try {
const subscriber = getFirestore(app)
.collection("Users")
.doc("Sam")
.onSnapshot((snapshot) => {
const firstName = snapshot.data().firstname;
setText(firstName);
});
return () => subscriber();
} catch (error) {
console.error("Error fetching data:", error);
}
};
fetchData();
}, []);
return (
<View style={styles.container}>
<Text>{text}</Text>
<StatusBar style="auto" />
</View>
);
}
供参考,我使用的版本是:
"@react-native-firebase/app": "^21.5.0",
"@react-native-firebase/firestore": "^21.5.0",
"expo": "~52.0.7",
"react": "18.3.1",
"react-native": "0.76.2",