56 lines
3.0 KiB
Markdown
56 lines
3.0 KiB
Markdown
# 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` и ассетов.
|