Зачаток мобилки

This commit is contained in:
Халимов Рустам
2026-04-07 17:27:52 +03:00
parent 02043d4d97
commit abc491c042
32 changed files with 10377 additions and 1175 deletions

View File

@@ -0,0 +1,55 @@
# 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` и ассетов.