# 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` и ассетов.
