12.10.2026 Технический разбор RU

Волгатех.Коллектив: обновление из приложения, версия для iPhone и компьютеров, напоминания и виджет

Версии 0.5.1 и 0.5.2: приложение само предлагает обновление и проверяет файл перед установкой, работает в браузере — на iPhone без App Store и на компьютере в своей раскладке, напоминает о занятиях, показывает ближайшую пару на виджете, сообщает о новых письмах и хранит отчёты об ошибках только на устройстве.

Никита Конкин

Проект Репозиторий Скачать APK
Языковые версии: RU EN

После встроенной почты за неделю вышли две версии. Они отвечают на три вопроса, которые оставались открытыми: как обновлять приложение, которого нет в магазине, как пользоваться им на iPhone, для которого нет подписанной сборки, и как сделать так, чтобы расписание напоминало о себе само. На скриншотах — вымышленные данные.

Обновление без магазина приложений

Приложение распространяется файлами APK со страницы выпусков, и до версии 0.5.1 о новой версии можно было узнать, только зайдя туда. Теперь приложение само спрашивает GitHub о последнем выпуске — при запуске и при возвращении, не чаще раза в шесть часов. Если версия новее, поверх открытого экрана появляется полоса «Доступна версия X · N МБ».

«Обновить» скачивает APK именно для этой сборки — со встроенной почтой или без, для нужного типа процессора, который приложение узнаёт из кода своей версии. Перед установкой файл сверяется с размером и SHA-256, которые публикует GitHub, и только потом передаётся установщику Android. Тот в свою очередь примет APK, только если он подписан ключом самого приложения, поэтому подменить обновление чужим файлом нельзя.

Экран «Настройки» с полосой «Доступна версия 0.5.1 · 22,0 МБ» и кнопками «Позже» и «Обновить»
Обновление: полоса над любым экраном и строка в «Настройках».
Домашний экран Android с виджетом: «Сейчас · до 20:47», время, предмет, аудитория и следующее занятие
Виджет «Ближайшая пара»: текущее занятие, аудитория и следующее за ним.
Уведомление «Через 15 мин: Сети (лекция)» с временем и номером аудитории
Напоминание за 15 минут: что и где.

iPhone без App Store

Для iPhone у приложения есть сборка, но подписать и выложить её можно только с платной учётной записью разработчика Apple. Обходной путь оказался в самом Flutter: то же приложение собрано для браузера, открывается в Safari и ставится на экран «Домой» как отдельное приложение со своими данными. Сайт публикуется на GitHub Pages и на GitVerse и обновляется при каждом изменении приложения, так что обновлять ничего не нужно.

Чтобы браузерная версия вела себя как настоящая, пришлось закрыть несколько мест:

  • Безопасные области экрана. Вырез, Dynamic Island и полоска «Домой» Safari сообщает через CSS env(), а веб-движок Flutter оставляет их нулевыми. Приложение читает их само, в том числе в горизонтальной ориентации.
  • Ничего с чужих серверов. Шрифт Roboto и движок Flutter лежат на самом сайте, поэтому ни один запрос не уходит в Google.
  • Запуск без сети. Service worker сохраняет только файлы самого приложения и никогда — ответы API университета. Первая версия заработала без сети лишь со второго визита: при первом страница загружалась раньше, чем worker успевал её увидеть. Теперь запущенное приложение само передаёт worker’у список загруженных файлов, и одного визита достаточно.
  • Заставка загрузки. Пока грузится движок, видны логотип и полоса прогресса по шагам запуска. Через 8 секунд заставка говорит, что связь медленная, через 30 — предлагает обновить страницу.

Каждый экран проверен тестами на размерах всех iPhone, от первого SE до 17 Pro Max, и в горизонтальной ориентации, с настоящим шрифтом: ничего не выходит за край и не прячется под строкой состояния. Так нашлась кнопка .docx, которая на экране шириной 320 точек разрывала слово.

У браузерной версии есть честные ограничения. Почта открывается веб-версией в новой вкладке: почтовый сервер не разрешает веб-странице обращаться к нему, поэтому встроенного клиента в браузере нет. Нет блокировки по Face ID, напоминаний, виджета и уведомлений о почте: веб-страница не может проснуться в заданное время.

Компьютер

Тот же сайт открывается и на компьютере. В окне шириной от 1000 пикселей меню остаётся открытым слева, а экраны переключаются рядом с ним, сохраняя своё состояние. Списки держат читаемую ширину, обзор недели раскладывает дни сеткой, а стрелки ← и → листают день, неделю и месяц. В Chrome и Edge сайт можно установить как отдельное приложение.

Браузерная версия на компьютере: боковое меню с профилем и разделами и обзор недели с семью карточками дней
Обзор недели в браузере на компьютере: меню слева, дни — сеткой. Имя и расписание вымышлены.

Расписание напоминает о себе

  • «Сегодня» возвращает к текущему дню из любого другого дня или недели.
  • «В календарь» выгружает занятия недели или экзамены файлом .ics для Google Календаря, Outlook или календаря iPhone. Файл соответствует RFC 5545: время переведено в UTC из московского, строки перенесены по 75 байт так, чтобы не разрезать букву, совместное занятие двух групп — одно событие. Идентификаторы событий не меняются от выгрузки к выгрузке, поэтому повторный импорт обновляет календарь, а не удваивает его.
  • Напоминания за 10, 15 или 30 минут до занятия — с предметом и аудиторией. Они строятся по загруженным неделям, не дальше чем на две вперёд, на точных будильниках Android и переживают перезагрузку телефона. На эмуляторе они пришли с точностью до секунды.
  • Виджет «Ближайшая пара» показывает текущее или следующее занятие и то, что после него, и сам переходит к следующему, когда занятие кончается, — по будильнику, который не будит телефон.

Выход из учётной записи теперь очищает и виджет, и запланированные напоминания.

Почта

В сборке со встроенной почтой появились уведомления о новых письмах. Android проверяет «Входящие» раз в 15 минут — чаще система не позволяет — даже при закрытом приложении, одним лёгким запросом о двадцати последних письмах. Уведомление получает только непрочитанное письмо, пришедшее после последнего уже показанного, и только один раз: включение функции не поднимает старую почту. Если сервер отклонил пароль, приложение его забывает, чтобы фоновые проверки не приблизили блокировку учётной записи.

Ещё несколько писем теперь можно выбрать сразу и пометить, переместить, отправить в архив или удалить — с одной кнопкой «Отменить» на всех. Закрепление использует собственные закрепления Outlook, поэтому видно и в веб-версии. Картинки, PDF и текстовые вложения открываются прямо в приложении.

Шторка уведомлений Android с тремя уведомлениями о письмах от вымышленных отправителей
Уведомления о новых письмах: по одному на письмо, под общей сводкой.
Список писем с тремя отмеченными письмами и панелью действий: прочитано, архив, перемещение, удаление
Несколько писем выбрано: действия для всех сразу в верхней панели.
Экран «Отчёты об ошибках» с кнопками «Отправить» и «Скопировать» и двумя записями об ошибках
Отчёты об ошибках хранятся только на устройстве и уходят разработчику, только если их отправить.

Отчёты об ошибках

Ошибки приложения теперь записываются — но только на самом устройстве, последние двадцать. В «Настройках» их видно с версией, числом повторов и местом в коде, и отправить разработчику их можно только вручную: через меню «Поделиться» на Android или копированием в браузере. Перед этим из отчёта убираются адреса, токены и длинные числа, так что в нём нет ни логина, ни почты, ни данных расписания.

Выводы

  1. Обновление вне магазина приложений безопасно, если проверяется дважды: файл сверяется с опубликованными размером и хешем, а установщик принимает только подпись самого приложения.
  2. Кроссплатформенный фреймворк даёт обходной путь к платформе, закрытой для распространения: браузерная сборка на iPhone не требует учётной записи разработчика.
  3. Браузерная версия честна, когда её ограничения названы прямо: без уведомлений и встроенной почты — потому что веб-страница этого не может.
  4. Офлайн-кэш стоит проверять на самом первом визите: именно там worker ещё ничего не видел.
  5. Фоновая работа должна быть осторожнее основной: проверка почты, которая забывает отклонённый пароль, не доведёт учётную запись до блокировки.

Доступность

Теги

программирование flutter dart мобильная-разработка веб

Другие обновления по проекту

12.10.2026 Технический разбор Волгатех.Коллектив — мобильный личный кабинет работника ПГТУ

Волгатех.Коллектив: Liquid Glass — стекло, иней и узоры времён года

Как в приложении появилась тема «Liquid Glass»: полупрозрачные панели над цветным фоном, матовое стекло, иней из фрактальных кристаллов и узор по времени года — листья, иней, цв...

01.10.2026 Технический разбор Волгатех.Коллектив — мобильный личный кабинет работника ПГТУ

Волгатех.Коллектив: своя почта для университетского Exchange

В версии 0.5.0 «Почта» стала встроенным клиентом вместо веб-версии в окне приложения. Университетская почта — локальный Exchange без OAuth, поэтому клиенту нужен пароль, а прило...