# 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`: ```bash npx expo prebuild ``` ### Шаг 2: Сборка APK (Gradle) Перейдите в папку `android` и запустите сборку: ```bash cd android ./gradlew assembleRelease ``` APK будет находиться в: `android/app/build/outputs/apk/release/app-release.apk` ## 3. Self-Hosted обновления (OTA) ### Процесс публикации: 1. Выполните экспорт бандла: ```bash 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` и ассетов.