логотип PurpleSchool
логотип PurpleSchool

Интеграция Firebase с React Native

Автор

Олег Марков

Введение

Интеграция Firebase с React Native — это современный подход к созданию полноценных мобильных приложений без необходимости разработки собственного бэкенда и сервисов. С помощью Firebase вы получаете в свое распоряжение готовые инструменты для аутентификации пользователей, работы с базой данных в реальном времени, управления push-уведомлениями, аналитики, хранения файлов и многого другого.

В этой статье я подробно расскажу, как базово и продвинуто встроить Firebase в ваше React Native приложение. Здесь вы найдете работающие примеры кода и инструкции на всех этапах: от установки до использования отдельных сервисов.

Установка и начальная настройка

Шаг 1. Инициализация проекта React Native

Создайте новый проект, если он ещё не создан:

npx react-native init MyFirebaseApp

или, если вы используете Expo: bash npx create-expo-app MyFirebaseApp

Firebase предоставляет широкий набор сервисов для разработки мобильных приложений, включая аутентификацию, базу данных, хранилище и аналитику. Интеграция Firebase с React Native позволяет создавать масштабируемые и надежные приложения с использованием готовых решений. Чтобы эффективно использовать Firebase, необходимо понимать принципы работы каждого сервиса и уметь их интегрировать в React Native проект. Если вы хотите детально разобраться в интеграции Firebase с React Native и создавать современные full-stack мобильные приложения — приходите на наш большой курс React Native и Expo Router. На курсе 184 уроков и 11 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.

Шаг 2. Регистрация приложения в Firebase

  1. Перейдите на консоль Firebase.
  2. Нажмите "Добавить проект" или выберите уже существующий.
  3. Добавьте новое приложение – выберите Android или iOS в зависимости от вашей цели.
  4. Следуйте инструкциям для загрузки Google Services файлов:
    • Для Android — google-services.json поместите в папку android/app.
    • Для iOS — GoogleService-Info.plist в папку ios/YourProject/.

Шаг 3. Установка зависимостей

Для типового RN проекта (без Expo) поставьте:

npm install @react-native-firebase/app

Если нужно подключать отдельные модули (например, аутентификацию или базу данных):

npm install @react-native-firebase/auth @react-native-firebase/firestore

Для Expo проекты используйте:

npx expo install expo-firebase-core firebase

Важно: Для iOS выполните после установки библиотек команду:

cd ios && pod install && cd ..

Это поставит CocoaPods зависимости.

Шаг 4. Проверка интеграции

Откройте или создайте любой компонент и добавьте простой вызов:

import React from 'react';
import { View, Text } from 'react-native';
import app from '@react-native-firebase/app'; // Импортируйте пакет Firebase

const HomeScreen = () => {
  // Проверяем, что приложение инициализировано
  console.log('Firebase name:', app().name); // Выведет '[DEFAULT]', если все работает

  return (
    <View>
      <Text>Firebase is configured!</Text>
    </View>
  );
};

export default HomeScreen;

Если ошибок не возникло, интеграция на базовом уровне завершена.

Использование основных модулей Firebase

Аутентификация пользователей

Firebase Auth поддерживает email-пароль, Google, Facebook и другие способы входа.

Регистрация и вход по E-mail и паролю

Добавьте пакет:

npm install @react-native-firebase/auth

Теперь пример регистрации и входа:

import auth from '@react-native-firebase/auth';

// Регистрация нового пользователя
const register = async (email, password) => {
  try {
    await auth().createUserWithEmailAndPassword(email, password);
    // Пользователь добавлен
  } catch (error) {
    // Обработка ошибок
    console.error(error.message);
  }
};

// Вход пользователя
const login = async (email, password) => {
  try {
    await auth().signInWithEmailAndPassword(email, password);
    // Пользователь вошел
  } catch (error) {
    // Обработка ошибок
    console.error(error.message);
  }
};

Комментарии:

  • error.code даст тип ошибки (например, почта занята, слабый пароль и т. п.).
  • Для работы с social login (Google, Facebook) потребуется добавить SDK и настроить OAuth — это делается отдельно для каждой платформы.

Подписка на изменения состояния пользователя

Хорошей практикой будет слушать изменение статуса авторизации, чтобы, например, перестраивать навигацию:

import { useEffect, useState } from 'react';
import auth from '@react-native-firebase/auth';

function useAuth() {
  const [user, setUser] = useState(null);

  useEffect(() => {
    // Подписка на изменение авторизации
    const unsubscribe = auth().onAuthStateChanged(setUser);
    return unsubscribe; // снимет подписку при размонтировании компонента
  }, []);

  return user;
}

Использование:

const user = useAuth();
if (user) {
  // Пользователь вошел
} else {
  // Не авторизован
}

Работа с базой данных Firestore

Cloud Firestore — это облачная база данных NoSQL реального времени.

Инициализация и базовые операции

Установите пакет:

npm install @react-native-firebase/firestore

Теперь покажу, как добавить и получить данные:

import firestore from '@react-native-firebase/firestore';

// Добавить документ
const addUser = async () => {
  await firestore()
    .collection('Users')
    .add({
      name: 'Ivan',
      age: 30,
      createdAt: firestore.FieldValue.serverTimestamp(), // Время создания
    });
};

// Получить все документы из коллекции
const getUsers = async () => {
  const usersSnapshot = await firestore().collection('Users').get();
  // Преобразуем документы в объекты
  const users = usersSnapshot.docs.map(doc => ({ id: doc.id, ...doc.data() }));
  return users;
};

Реальное время

Вы можете слушать изменения данных:

import { useEffect, useState } from 'react';
import firestore from '@react-native-firebase/firestore';

function useUsers() {
  const [users, setUsers] = useState([]);
  useEffect(() => {
    // Слушаем коллекцию
    const unsubscribe = firestore()
      .collection('Users')
      .onSnapshot(snapshot => {
        const usersList = snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() }));
        setUsers(usersList);
      });
    return unsubscribe; // Очистка подписки
  }, []);
  return users;
}

Комментарии:

  • С onSnapshot ваш UI будет обновляться сразу после изменения данных на сервере.
  • Firestore поддерживает сложные запросы и фильтрацию — смотрите документацию для продвинутых кейсов.

Хранение файлов: Cloud Storage

Cloud Storage подходит для загрузки и отдачи изображений, PDF и любых файлов.

Установка и добавление файлов

Установите зависимость:

npm install @react-native-firebase/storage

Пример загрузки фото:

import storage from '@react-native-firebase/storage';

// Загрузка файла с устройства
const uploadFile = async (pathToFile, fileName) => {
  const reference = storage().ref(fileName);
  // Загрузить файл методом putFile
  await reference.putFile(pathToFile);
  // Получить ссылку для скачивания
  const url = await reference.getDownloadURL();
  return url;
};

Комментарии:

  • pathToFile — путь к файлу на устройстве, его можно получить через react-native-image-picker или аналогичный пакет.
  • Файлы можно группировать в подпапки, например: images/avatars/userid.jpg.

Отправка Push-уведомлений через Firebase Cloud Messaging (FCM)

Firebase поддерживает работу с пушами для iOS и Android.

Установка и базовая интеграция

npm install @react-native-firebase/messaging

Android: автоматически настроится через google-services.json.

iOS: важна дополнительная конфигурация — настройка APNs, сертификатов, описана в официальной документации.

Получение и обработка уведомлений

Пример подписки на уведомления в приложении:

import messaging from '@react-native-firebase/messaging';

// Запросить разрешения (iOS требует)
await messaging().requestPermission();

// Получить токен устройства
const fcmToken = await messaging().getToken(); // Этот токен нужен серверу для отправки пушей

// Слушаем входящие сообщения
messaging().onMessage(async remoteMessage => {
  // remoteMessage содержит данные уведомления
  console.log('New FCM message:', remoteMessage);
});

Комментарии:

  • Из приложения вы обычно только получаете пуши. Отправлять их массово можно через Firebase Console или сервер.
  • Для кастомизации уведомлений используйте payload с нужными параметрами.

Аналитика в Firebase

Firebase Analytics позволяет отслеживать действия пользователей.

Установка и отслеживание событий

npm install @react-native-firebase/analytics

Пример отправки кастомного события:

import analytics from '@react-native-firebase/analytics';

// Отправка кастомного события
const logEvent = async () => {
  await analytics().logEvent('visit_screen', {
    screen_name: 'Home',
    time: Date.now(),
  });
};

Комментарии:

  • Все события будут доступны в Google Analytics.
  • Firebase сам считает основные метрики: количество active users, retention, screen views и др.

Настройка безопасности и прав доступа

Firestore Security Rules

Вам стоит сразу продумать правила доступа к данным — иначе ваша база будет открыта всему миру.

Пример базового ограничения: только аутентифицированный пользователь может читать или писать свою коллекцию.

// Firestore rules
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /Users/{userId} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

Комментарии:

  • Изучите правила безопасности в консоли Firebase!
  • Для Storage также пишутся отдельные security rules.

Разработка и отладка: советы и особенности

Польза переменных окружения

Используйте переменные окружения для ключей проекта, не храните секреты в Git:

FIREBASE_API_KEY=...
FIREBASE_PROJECT_ID=...

Подключайте их через библиотеки типа react-native-dotenv.

Инструменты для тестирования локально

  • Firebase Emulator Suite позволяет поднимать локальные сервера Auth, Firestore, Storage и др.
  • Это удобно для теста без расхода бюджета и без риска случайно повредить боевую базу.

Продвинутые возможности

  • Remote Config — позволяет менять параметры приложения без обновления.
  • Dynamic Links — глубокие ссылки между приложением и веб-сайтом.
  • Crashlytics — мониторинг сбоев приложения.

Что делать при ошибках: частые проблемы и их диагностика

  • Ошибка инициализации: Проверьте расположение и содержимое google-services.json/GoogleService-Info.plist.
  • Не срабатывает аутентификация: Убедитесь, что включен нужный способ входа в консоли Firebase.
  • Не приходят пуши: Проверьте, что все разрешения выданы приложению, и что вы используете свежий push-токен устройства.
  • Firestore "Permission denied": Правила безопасности не разрешают доступ — отладьте их в Firebase консоли.

Заключение

Вы узнали, как подключить и использовать основные функции Firebase в приложении React Native. Такой подход экономит месяцы работы и позволяет сконцентрироваться на бизнес-логике, а не инфраструктуре. Firebase легко масштабируется, поддерживает интеграцию с аналитикой, push-уведомлениями и авторизацией практически «из коробки». Вы можете расширить свой проект с помощью дополнительных сервисов Firebase, когда это потребуется. Не забывайте тщательно следить за настройкой безопасности и конфиденциальности — особенно в продакшн-приложениях.

Интеграция с Firebase является важным аспектом разработки современного React Native приложения. Однако, для создания полноценного приложения необходимо освоить множество других технологий и подходов, включая работу с UI, данными и нативными функциями. Курс React Native и Expo Router поможет вам в этом. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир React Native прямо сегодня.

Частозадаваемые технические вопросы по теме статьи и ответы на них

1. Как безопасно хранить ключи Firebase и другие конфиденциальные данные в React Native проекте?
Не добавляйте конфиги или секреты в исходный код и не коммитьте их в репозиторий. Используйте переменные окружения с помощью библиотек типа react-native-config или dotenv. Для iOS и Android ключи из service-файлов всё равно должны быть включены, но они не содержат приватных средств доступа.

2. Что делать, если нет доступа к определённым коллекциям или документам в Firestore, хотя пользователь авторизован?
Проверьте Firebase Security Rules. Ошибки “Permission denied” свидетельствуют о неправильных правилах доступа. Проверьте, что правило разрешает — например, uid пользователя совпадает с частью пути в коллекции.

3. Почему пуш-уведомления не приходят на iOS, хотя всё работает на Android?
iOS требует настройки APNs, регистрации App ID и создания p8/p12 сертификата в Apple Developer Console. Также не забудьте запросить и обработать разрешения пользователя на получения уведомлений (messaging().requestPermission()).

4. Как выполнить атомарную операцию (например, инкремент числа) в Firestore?
Для этого используйте FieldValue.increment из Firestore: javascript await firestore().collection('Users').doc(userId).update({ score: firestore.FieldValue.increment(1), }); Эта операция безопасна для конкурентного доступа.

5. Как разлогинить пользователя и сбросить состояние приложения?
Вызовите auth().signOut(), а затем обновите ваш state или сбросьте навигацию. Пользователь будет полностью разлогинен в приложении: javascript await auth().signOut();

Стрелочка влевоИнтеграция React Native с сервисами GoogleУправление config на React NativeСтрелочка вправо

Постройте личный план изучения React-native до уровня Middle — бесплатно!

React-native — часть карты развития Mobile

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по React-native

Работа со ScrollView в React NativeРабота с видео в React NativeКак реализовать аудиоплеер на React NativeНастройка и использование input и textinput в React NativeИнтеграция видео плеера в приложение на React NativeИспользование выпадающих списков в React NativeСоздание и настройка native module на React NativeКак создать модальные окна в React NativeРабота с изображениями в React NativeОтображение списков данных в React NativeГайд по файловой системе в React NativeИнтеграция камеры в приложение на React NativeСоздание интерактивных кнопок в React Native
Как использовать векторные иконки в React Native5 популярных библиотек UI компонентов React NativeРуководство по стилизации компонентов в React NativeСоздание и использование tabs в React NativeОптимизация переходов между экранами в React NativeАдаптация safe area context на React NativeОбзор библиотек для навигации в React NativeСоздание сложных анимаций (reanimated) на React NativeИспользование библиотеки стилей Paper в React NativeРуководство по navigation в React NativeОптимизация отображения списков в React NativeКак реализовать linking на React NativeГайд по UI-китам для React NativeГде искать elements для приложения на React NativeРабота с цветами в React Native
Открыть базу знаний

Лучшие курсы по теме

изображение курса

React Native и Expo Router

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Основы JavaScript

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий