React Native (Expo) прототип семейного мессенджера Lentik для Android 13+.
- Тёплые цвета: бежевый фон
#FFF8F0, акцент — терракот#b07d52(единый с веб-приложением) - Шрифт: минимум 18px во всех элементах
- Touch-targets: кнопки не менее 56dp
- Иконки везде с подписями
- Целевая аудитория: пожилые пользователи
src/
├── api/ # HTTP-клиент + методы API
│ ├── client.js # axios с Bearer-токеном
│ ├── auth.js # Вход, регистрация
│ ├── chats.js # Чаты, сообщения
│ ├── families.js # Семьи
│ ├── gallery.js # Галерея
│ └── me.js # Текущий пользователь
├── context/
│ ├── AuthContext.js # Авторизация + хранение токена
│ └── FamilyContext.js # Выбранная семья
├── navigation/
│ └── RootNavigator.js # Роутинг: Auth / FamilySelect / Tabs
├── screens/
│ ├── LoginScreen.js
│ ├── RegisterScreen.js
│ ├── FamilySelectScreen.js
│ ├── ChatsListScreen.js
│ ├── ChatScreen.js # WebSocket + отправка сообщений
│ ├── GalleryScreen.js # Фото-сетка + загрузка
│ └── ProfileScreen.js
└── components/
├── PinKeypad.js # Цифровая клавиатура для PIN
├── MessageBubble.js
└── ChatListItem.js
| Инструмент | Версия |
|---|---|
| Node.js | 18+ |
| npm / yarn | любая |
| Expo CLI | последняя |
| EAS CLI | для сборки APK |
| Android Studio | для эмулятора |
# Установить глобально
npm install -g expo-cli eas-cliОткройте файл src/config.js и укажите URL вашего FastAPI backend:
// Пример для локальной сети:
export const API_BASE_URL = 'http://192.168.1.100:8000';
// Пример для публичного сервера:
export const API_BASE_URL = 'https://api.your-domain.com';Важно: Если сервер работает локально на ПК, телефон должен быть в одной Wi-Fi сети. Используйте IP-адрес ПК, а не
localhost.
cd lentik-mobile
npm installПоложите в папку assets/:
icon.png— 1024×1024 (иконка приложения)splash.png— 1284×2778 (заставка при запуске)adaptive-icon.png— 1024×1024 (Android adaptive icon)
Если иконок нет — приложение запустится с пустой иконкой.
- Установите Expo Go на Android-устройство
- Запустите dev-сервер:
npm start
- Сканируйте QR-код в Expo Go
Ограничение: Expo Go не поддерживает всё — используйте способ Б для полноценного теста.
# Создать development build для Android
npx expo run:androidТребует Android Studio с настроенным эмулятором или подключённым устройством.
-
Войдите в аккаунт Expo:
eas login
-
Настройте проект:
eas build:configure
Это создаст файл
eas.json. -
Запустите сборку:
# Preview APK (для тестирования) eas build --platform android --profile preview # Release AAB (для Google Play) eas build --platform android --profile production
-
После сборки скачайте APK по ссылке из консоли.
# Сгенерировать android/ папку
npx expo prebuild --platform android
# Собрать debug APK
cd android && ./gradlew assembleDebug
# APK будет здесь:
# android/app/build/outputs/apk/debug/app-debug.apk- Включите «Установку из неизвестных источников» в настройках Android
- Скопируйте APK на телефон (USB, облако, email)
- Откройте файловый менеджер и нажмите на APK
- Подтвердите установку
Если EAS спросит — вот готовый пример:
{
"cli": { "version": ">= 12.0.0" },
"build": {
"preview": {
"android": {
"buildType": "apk",
"gradleCommand": ":app:assembleRelease"
}
},
"production": {
"android": {
"buildType": "app-bundle"
}
}
}
}Приложение подключается к Lentik FastAPI backend по REST API и WebSocket:
| Метод | Путь | Назначение |
|---|---|---|
| POST | /auth/pin |
Вход |
| POST | /auth/register |
Регистрация |
| GET | /me |
Данные пользователя |
| GET | /me/families |
Список семей |
| GET | /families/:id |
Детали семьи |
| GET | /families/:id/chats |
Список чатов |
| GET | .../chats/:id/messages |
Сообщения |
| POST | .../chats/:id/messages |
Отправить сообщение |
| WS | .../chats/:id/ws?token= |
Real-time чат |
| GET | /families/:id/gallery |
Галерея |
| POST | /families/:id/gallery |
Загрузить фото |
- Expo SDK 51 — мобильная платформа
- React Native 0.74 — UI фреймворк
- React Navigation v6 — навигация
- Axios — HTTP запросы
- expo-secure-store — безопасное хранение токена
- expo-image-picker — выбор фото из галереи
# Запуск с очисткой кеша
npx expo start --clear
# Запуск только на Android
npx expo start --android
# Логи
npx expo start --verbose- Минимум: Android 13 (SDK 33)
- Цель: Android 14 (SDK 34)
npm audit показывает ~26 advisories (Expo SDK 51). Все они — в dev/build-инструментарии
(@expo/cli, @expo/metro-config, @expo/prebuild-config, @react-native-community/cli-*,
tar, xcode, @xmldom/xmldom, cacache, send и т.п.). Эти пакеты выполняются на машине
разработчика во время expo start / eas build и не попадают в собранный APK/IPA —
рантайм-экспозиция опубликованного приложения по ним близка к нулю.
Безопасный npm audit fix (без --force) их не закрывает: все фиксы тянут мажорный апгрейд
expo@~56 (SDK 51 → 56) или react-native@0.86, т.е. несколько ломающих мажоров (RN 0.74→0.81+,
React 18→19, native-модули). npm audit fix --force запускать нельзя — он сломает сборку.
Решение (осознанно принято): оставляем на SDK 51; апгрейд Expo SDK планируется отдельной задачей при активной разработке, инкрементально (51→52→53→…) с тестированием на устройстве/ эмуляторе после каждого шага:
npx expo install expo@^52 # поднять на следующую SDK
npx expo install --fix # выровнять expo-* и RN под неё
npx tsc --noEmit # проверить типы
# затем прогон на устройстве/эмулятореРантайм-безопасность мобильного клиента обеспечена иначе: JWT хранится в
expo-secure-store(Keychain/Keystore, не в доступном из JS хранилище), а трафик идёт по HTTPS к API.