Files
forkmessager/client-mobile/docs/mobile_implementation.md
Халимов Рустам abc491c042 Зачаток мобилки
2026-04-07 17:27:52 +03:00

3.0 KiB
Raw Blame History

Knot Messenger Mobile — Локальная сборка и Self-Hosted OTA

Этот документ описывает процесс перехода с инфраструктуры Expo (EAS) на полностью автономную сборку и обновление.

1. Конфигурация проекта

Переход на Bare Workflow

Проект настроен так, чтобы генерировать нативный Android-код локально.

  • app.json: Обновлен параметр updates.url на ваш сервер.
  • google-services.json: Добавлен конфиг Firebase (нужно заменить на ваш реальный из консоли Firebase).

Прямой Firebase (FCM)

Вместо прокси-серверов Expo теперь используется @react-native-firebase/messaging.

  • Токен получается напрямую через messaging().getToken().
  • Обработка уведомлений происходит через setBackgroundMessageHandler.

2. Инструкция по сборке (Local Build)

Шаг 1: Генерация нативного кода

Выполните команду для создания папки android/ на основе вашего app.json:

npx expo prebuild

Шаг 2: Сборка APK (Gradle)

Перейдите в папку android и запустите сборку:

cd android
./gradlew assembleRelease

APK будет находиться в: android/app/build/outputs/apk/release/app-release.apk

3. Self-Hosted обновления (OTA)

Процесс публикации:

  1. Выполните экспорт бандла:
    node scripts/export-updates.js
    
  2. Скопируйте содержимое папки client-mobile/dist на ваш Nginx сервер.
  3. Убедитесь, что сервер доступен по адресу: https://my-server.com/api/v1/updates (как указано в app.json).

Проверка в приложении:

В App.tsx подключен UpdateService.ts, который:

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

4. SignalR и Фон

  • Использован expo-keep-awake для предотвращения засыпания приложения при активном соединении.
  • Определена фоновая задача SIGNALR_BACKGROUND_TASK через expo-task-manager для обработки данных в свернутом состоянии.

5. Требования к Nginx

Чтобы expo-updates корректно скачивал файлы, ваш сервер должен отдавать:

  • expo-protocol-version: 1 в заголовках.
  • Правильные MIME-типы для .js и ассетов.