# expo-firebase **Repository Path**: chenbool/expo-firebase ## Basic Information - **Project Name**: expo-firebase - **Description**: Expo + Firebase(使用 JS SDK)项目的方式 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-21 - **Last Updated**: 2026-04-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # expo-firebase-starter 🔥 ![支持 Expo iOS](https://img.shields.io/badge/iOS-4630EB.svg?style=flat-square&logo=APPLE&labelColor=999999&logoColor=fff) ![支持 Expo Android](https://img.shields.io/badge/Android-4630EB.svg?style=flat-square&logo=ANDROID&labelColor=A4C639&logoColor=fff) [![使用 Expo Go 运行](https://img.shields.io/badge/Runs%20with%20Expo%20Go-4630EB.svg?style=flat-square&logo=EXPO&labelColor=f3f3f3&logoColor=000)](https://expo.dev/client) 这是一个快速启动 Expo + Firebase(使用 JS SDK)项目的方式。它包含: - 基于 Expo SDK `50` - 使用 `react-navigation` 6.x.x 进行导航 - Firebase JS SDK v9 - 使用 Firebase 作为邮箱认证的后端 - 自定义可复用组件 - 用于切换密码输入框可见性的自定义 Hook - 使用 Formik 处理服务器错误 - 使用 Formik 和 yup 构建的登录、注册和密码重置表单 - 显示/隐藏密码字段可见性 👁 - 使用 Context API 和 Firebase 的 `onAuthStateChanged` 处理程序来检查用户认证状态的自定义 Provider - 使用 Firebase 邮箱方法处理忘记密码重置 - 使用 [Expo Vector Icons](https://icons.expo.fyi/) - 使用 [KeyboardAwareScrollView](https://github.com/APSL/react-native-keyboard-aware-scroll-view) 包处理键盘出现并自动滚动到聚焦的 TextInput - 使用 `dotenv` 和 `expo-constants` 包管理环境变量(防止在公共仓库中暴露) - 所有组件现在都是函数组件并使用 [React Hooks](https://reactjs.org/docs/hooks-intro.html) ## 安装 1. 使用 Firebase 启动模板创建新项目。 ```bash npx create-react-native-app --template https://github.com/expo-community/expo-firebase-starter ``` 2. 将文件 `.env.example` 重命名为 `.env` 3. 使用您自己的配置更新 `.env`,例如: ```shell # 使用前将此文件重命名为 ".env" # 将 XXXX 替换为您自己的 Firebase 配置密钥 API_KEY=XXXX AUTH_DOMAIN=XXXX PROJECT_ID=XXXX STORAGE_BUCKET=XXXX MESSAGING_SENDER_ID=XXXX APP_ID=XXXX ``` ## 运行项目 要启动开发服务器并运行您的项目: ``` npx expo start ``` 除了使用 Expo Go,如果您要构建的不仅仅是业余项目或原型,请确保 [创建开发版本](https://docs.expo.dev/develop/development-builds/introduction/)。您可以 [本地编译您的项目](https://docs.expo.dev/guides/local-app-development/#local-builds-with-expo-dev-client) 或 [使用 EAS](https://docs.expo.dev/develop/development-builds/create-a-build/)。 要本地编译您的应用,请运行: ``` # 构建原生 Android 项目 npx expo run:android # 构建原生 iOS 项目 npx expo run:ios ``` ## 文件结构 ```shell Expo Firebase Starter ├── assets ➡️ 所有静态资源,包括应用图标 ├── components ➡️ 所有可复用的表单屏幕 UI 组件 │ └── Button.js ➡️ 使用 Pressable 的自定义按钮组件,带有两种变体并处理透明度 │ └── TextInput.js ➡️ 支持左右图标的自定义文本输入组件 │ └── Icon.js ➡️ 图标组件 │ └── FormErrorMessage.js ➡️ 显示来自 Firebase 的服务器错误的组件 │ └── LoadingIndicator.js ➡️ 加载指示器组件 │ └── Logo.js ➡️ Logo 组件 │ └── View.js ➡️ 支持安全区域视图的自定义视图组件 ├── hooks ➡️ 所有自定义 Hook 组件 │ └── useTogglePasswordVisibility.js ➡️ 在确认密码字段上切换 TextInput 组件密码可见性的自定义 Hook ├── config ➡️ 所有配置文件 │ └── firebase.js ➡️ 使用 firebaseConfig 和 auth 初始化 Firebase 的配置文件 │ └── images.js ➡️ 引入图片资源,应用中的可复用值 │ └── theme.js ➡️ 默认颜色集合,应用中的可复用值 ├── providers ➡️ 使用 React Context API 的所有自定义 Provider │ └── AuthenticatedUserProvider.js ➡️ 登录时共享 Firebase 用户对象的认证用户上下文组件 ├── navigation │ └── AppStack.js ➡️ 受保护的路由,如首页屏幕 │ └── AuthStack.js ➡️ 用户未认证时的路由,如登录屏幕 │ └── RootNavigator.js ➡️ 基于 Firebase 用户登录状态在认证屏幕和应用屏幕之间切换 ├── screens │ └── ForgotPassword.js ➡️ 忘记密码屏幕组件 │ └── HomeScreen.js ➡️ 受保护的路由/屏幕组件 │ └── LoginScreen.js ➡️ 登录屏幕组件 │ └── SignupScreen.js ➡️ 注册屏幕组件 ├── App.js ➡️ 移动应用的入口点,在此包装所有 Provider ├── app.config.js ➡️ Expo 配置文件 └── babel.config.js ➡️ Babel 配置(应使用 `babel-preset-expo`) ``` ## 屏幕 主要屏幕: - 登录 - 注册 - 忘记密码 - 首页(最基本)带退出按钮 带验证的登录屏幕 成功注册尝试 忘记密码屏幕 注册屏幕上的验证 ## 开发版本和 React Native Firebase 库 本项目使用 Firebase JS SDK,它不支持所有服务(如 Crashlytics、Dynamic Links 和 Analytics)。但是,您可以通过 [创建开发版本](https://docs.expo.dev/develop/development-builds/introduction/) 在 Expo 项目中使用 `react-native-firebase` 库。 这两个库都可以满足不同的项目需求。要了解使用 Expo 构建应用时使用 Firebase JS SDK 和 React Native Firebase 库之间的区别,请参阅 Expo 官方文档的以下部分: - [何时使用 Firebase JS SDK](https://docs.expo.dev/guides/using-firebase/#when-to-use-firebase-js-sdk) - [何时使用 React Native Firebase](https://docs.expo.dev/guides/using-firebase/#when-to-use-react-native-firebase) --- 由 [@amanhimself](https://twitter.com/amanhimself) 用 💜 构建