3.0 KiB
3.0 KiB
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)
Процесс публикации:
- Выполните экспорт бандла:
node scripts/export-updates.js - Скопируйте содержимое папки
client-mobile/distна ваш Nginx сервер. - Убедитесь, что сервер доступен по адресу:
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и ассетов.