# История изменений системы обновлений ## Версия 1.1 - Упрощение и Desktop-фокус **Дата:** 2024 ### 🎯 Главное изменение Система обновлений переориентирована **только на Desktop платформы** (Windows, macOS, Linux). Android версия использует Google Play Store для автоматических обновлений. --- ### ✨ Что изменилось #### Код приложения 1. **new_version_dialog.dart** - Упрощён: - ✅ Android: Открывает браузер/Google Play - ✅ Desktop: Скачивание с прогресс-баром + автозапуск установщика - ❌ Удалены: Android permissions, MethodChannel, InstallHandler 2. **about_page.dart**: - Кнопка "Проверить обновления" видна **только на Desktop** - Android не показывает кнопку (обновления через Google Play) 3. **Android код удалён**: - ❌ `InstallHandler.kt` - удалён - ❌ `REQUEST_INSTALL_PACKAGES` permission - удалён из манифеста - ❌ Регистрация InstallHandler в MainActivity - удалена #### Документация 1. **README.md** - Обновлён: - Добавлено предупреждение о Desktop-only - Изменена диаграмма процесса обновления - Добавлены ссылки на Google Play для Android 2. **README_DESKTOP.md** - Создан: - Подробная инструкция для Desktop платформ - Структура файлов (.exe, .dmg, .AppImage) - Примеры конфигурации 3. **api.php** - Обновлён комментарий: - Указано, что API только для Desktop - Упомянуто использование Google Play для Android --- ### 🧹 Что почистили #### Удалённые файлы - `android/app/src/main/kotlin/com/umbrix/app/InstallHandler.kt` #### Удалённые permissions - `android.permission.REQUEST_INSTALL_PACKAGES` из AndroidManifest.xml #### Удалённый код - MethodChannel для проверки Android permissions - Функции `checkInstallPermission()`, `requestInstallPermission()` - Сложная логика установки APK из приложения --- ### 📦 Зависимости Используемые пакеты **только для Desktop**: - `dio` ^5.4.1 - HTTP запросы и загрузка файлов - `path_provider` ^2.1.1 - Временная директория для загрузок - `open_file` ^3.3.2 - Открытие установщика после загрузки Android теперь использует только: - `UriUtils.tryLaunch()` - Открытие браузера/Google Play --- ### 🔄 Логика работы #### Desktop (Windows/macOS/Linux) ```dart if (Platform.isWindows || Platform.isMacOS || Platform.isLinux) { // 1. Проверка обновлений на сервере // 2. Показ диалога с информацией о версии // 3. Скачивание с прогресс-баром (dio) // 4. Сохранение в temp директорию // 5. Автоматический запуск установщика (open_file) } ``` #### Android ```dart if (Platform.isAndroid) { // 1. Проверка обновлений НЕ показывается (кнопка скрыта) // 2. В production: прямая ссылка на Google Play // 3. В debug: открытие браузера с download_url } ``` --- ### 🚀 Дальнейшие планы #### Production деплой 1. **Windows**: - Создание `.exe` установщика - Подпись сертификатом - Загрузка в `downloads/windows/` 2. **macOS**: - Создание `.dmg` образа - Нотаризация Apple - Загрузка в `downloads/macos/` 3. **Linux**: - Создание `.AppImage` - Добавление `.deb` / `.rpm` пакетов - Загрузка в `downloads/linux/` 4. **Android**: - Публикация в Google Play Store - Удаление кастомного сервера обновлений - Автоматические обновления через магазин --- ### 💡 Почему так? **Проблема:** Android требует сложные разрешения для установки APK из приложения: - Нужен `REQUEST_INSTALL_PACKAGES` permission - Пользователь должен вручную дать разрешение в настройках - Это запутывает пользователей и выглядит нелогично **Решение:** - Android → Google Play Store (стандартный путь) - Desktop → Собственный сервер обновлений (гибкость и контроль) --- ### 📝 Заметки разработчика > "как то нелогично . но мы же его установили уже ... на андроид может и не надо такое обновление на exe надо будет" Было принято решение упростить систему: - На Android слишком сложно и нелогично обновлять APK изнутри приложения - Google Play Store делает это автоматически и безопасно - Desktop платформам нужна эта функция, так как нет централизованного магазина - Разделение платформ упрощает код и улучшает UX --- ## Версия 1.0 - Первый релиз **Дата:** 2024 - ✅ PHP API для проверки обновлений - ✅ Web-панель администратора - ✅ История версий - ✅ Поддержка beta/stable релизов - ✅ CORS настройки - ✅ Rate limiting - ✅ Логирование запросов - ✅ Интеграция с Flutter приложением **Проблемы версии 1.0:** - Пыталась поддерживать Android с установкой APK - Требовала сложные Android permissions - Запутанная UX для пользователей Android --- ## Миграция с 1.0 на 1.1 ### Для разработчиков 1. Обновите код приложения (Flutter): ```bash git pull flutter pub get flutter build apk --debug # для тестирования ``` 2. Удалите старый APK с устройства: ```bash adb uninstall com.umbrix.app ``` 3. Установите новую версию: ```bash adb install build/app/outputs/flutter-apk/app-debug.apk ``` ### Для сервера Ничего менять не нужно! API осталось совместимым. Просто обновите документацию: - `README.md` ← основной файл - `README_DESKTOP.md` ← подробности для Desktop ### Для пользователей **Android:** - Обновления теперь через Google Play Store - Кнопка "Проверить обновления" больше не показывается **Desktop:** - Всё работает как раньше, но с улучшенным UX - Прогресс-бар при скачивании - Автоматический запуск установщика --- ## Контрольный список релиза - [x] Упростить код для Android - [x] Реализовать скачивание для Desktop с прогресс-баром - [x] Удалить InstallHandler.kt - [x] Удалить REQUEST_INSTALL_PACKAGES permission - [x] Обновить README.md - [x] Создать README_DESKTOP.md - [x] Обновить комментарии в api.php - [x] Протестировать на Android emulator - [ ] Создать Windows .exe установщик - [ ] Создать macOS .dmg образ - [ ] Создать Linux .AppImage - [ ] Опубликовать в Google Play Store - [ ] Production деплой сервера