Интеграция Firebase Authentication в мобильное приложение

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

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

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Интеграция Firebase Authentication в мобильное приложение
Средний
от 1 дня до 3 дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Интеграция Firebase Authentication в мобильное приложение

Firebase Authentication закрывает большой объём работы из коробки: Email/Password, Phone, Google, Apple, Facebook, GitHub, anonymous auth — всё это готовые провайдеры. Но "из коробки" не значит "без конфигурации". Проекты, которые просто добавили FirebaseAuth.getInstance() и считают задачу решённой, регулярно получают проблемы в продакшене.

Что чаще всего настраивают неправильно

ID Token vs Custom Token vs Access Token. Firebase Auth возвращает Firebase ID Token — JWT, подписанный Google. Это не OAuth 2.0 access token для стороннего API. Если backend не Firebase — надо верифицировать Firebase ID Token на сервере (admin.auth().verifyIdToken()), получить UID и выдать собственный JWT. Видел проекты, где Firebase ID Token передавался напрямую в сторонний API в надежде, что "токен есть — значит авторизован". Это не работает.

Token refresh. Firebase SDK автоматически обновляет ID Token каждый час. Но currentUser?.getIdToken(forceRefresh: false) вернёт кэшированный токен, который может быть за 55 минут до истечения. Если передаёте токен на backend — вызывайте getIdToken(forceRefresh: true) перед каждым запросом или используйте Auth.auth().currentUser?.getIDTokenResult() для проверки expirationDate.

Sign in with Apple — отдельная конфигурация. Apple требует передачи nonce — случайной строки, хеш которой включается в Apple Identity Token. Firebase проверяет этот хеш. Без nonce интеграция работает на этапе разработки, но падает в продакшене на некоторых конфигурациях Apple ID.

// iOS — правильная интеграция Sign in with Apple + Firebase
let nonce = randomNonceString()
currentNonce = nonce
let request = ASAuthorizationAppleIDProvider().createRequest()
request.requestedScopes = [.fullName, .email]
request.nonce = sha256(nonce)

При получении Apple credential:

let credential = OAuthProvider.appleCredential(
    withIDToken: appleIDToken,
    rawNonce: nonce, // передаём оригинальный nonce, не хеш
    fullName: appleIDCredential.fullName
)
Auth.auth().signIn(with: credential)

Phone Authentication: нюансы

Firebase Phone Auth работает через reCAPTCHA верификацию на iOS и Play Integrity / SafetyNet на Android. Проблемы:

  • На симуляторе iOS автоматически используется invisible reCAPTCHA — в продакшене на реальном устройстве поведение может отличаться (появляется challenge).
  • verifyPhoneNumber требует APNs настройки для silent push на iOS — без этого верификация не проходит на устройствах с push notifications.
  • На Android: PhoneAuthProvider.verifyPhoneNumber с PhoneAuthOptions.Builder. Используем setActivity(this) — без привязки к Activity автоматическое определение не работает.

Тестовые номера телефонов в Firebase Console (+1 650-555-3434) позволяют тестировать без реальных SMS — добавляем их для QA-среды.

Listeners: AuthStateListener и IdTokenChangedListener

Два разных listener — разные события:

  • addAuthStateListener срабатывает при login/logout пользователя.
  • addIdTokenChangedListener срабатывает дополнительно при каждом обновлении ID Token (каждый час).

Для синхронизации токена с backend — используем IdTokenChangedListener. Для навигационных решений (показать экран логина / скрыть) — AuthStateListener.

На iOS важно снимать listener при dealloc/deinit:

deinit {
    if let handle = authStateHandle {
        Auth.auth().removeStateDidChangeListener(handle)
    }
}

Иначе краш в момент, когда Firebase пытается вызвать callback на уже деинициализированном объекте.

Security Rules

Если используете Firestore или Realtime Database — Security Rules должны ссылаться на request.auth.uid, а не доверять client-side логике. Типичная дыра: коллекция users без правила на чтение — любой аутентифицированный пользователь читает данные любого другого.

Минимальное правило:

match /users/{userId} {
  allow read, write: if request.auth != null && request.auth.uid == userId;
}

Мультитенантность

Firebase Authentication поддерживает tenants (через Google Cloud Identity Platform — расширенная версия Firebase Auth). Если у вас SaaS с изолированными клиентами — это правильный путь вместо создания отдельных Firebase проектов. Auth.auth().tenantID = "tenant-xyz" — переключает контекст.

Этапы интеграции

Создание Firebase проекта и конфигурация провайдеров → добавление GoogleService-Info.plist / google-services.json → реализация auth flow с обработкой ошибок → настройка backend-верификации ID Token → тестирование email/phone/social providers → Security Rules аудит → тестирование на реальных устройствах.

Срок: 6–10 рабочих дней для стандартного набора провайдеров (email + google + apple). Каждый дополнительный социальный провайдер (Facebook, Twitter) — плюс 1–2 дня с учётом настройки developer accounts.