Что это
Приложение само проверяет, вышла ли новая версия, скачивает её и устанавливает, не заставляя пользователя искать файл. Список версий подписан ключом, чтобы подменить его было нельзя.
Как используем
В OshaVPN обновления раз в час: Android качает APK под свою архитектуру, Windows скачивает только изменившиеся файлы и откатывает замену при сбое. Есть канал для тестеров.
Где самообновление нужно бизнесу
- Приложение раздаётся файлом, без магазина, и рассылать каждому новую версию вручную нереально.
- Исправление ошибки должно дойти до всех за часы, а не когда пользователь сам заметит.
- Подменённое обновление не должно установиться, даже если кто-то перехватил сервер выпусков.
- Обновление не должно мешать: прерывать музыку, рвать VPN или требовать нажатий.
Как мы это используем
- Подписанный список выпусков. В OshaVPN и OshaPlay список версий подписан ключом ECDSA P-256, открытый ключ вшит в приложение. Подменённый список и чужой ключ отвергаются, это закреплено тестами.
- Тихая установка. Android качает APK под свою архитектуру и ставит его сам при погасшем экране; OshaPlay ставит обновление, когда не играет музыка. На Windows установка идёт при скрытом окне и без ввода пользователя.
- Только изменения и откат. Windows-клиент скачивает только изменившиеся файлы, а обновляльщик откатывает замену, если она не удалась.
- Каналы. Есть канал для тестеров и обычный, проверка раз в час, а отказаться от обновлений можно в разделе «Для разработчика».
- Проверено вживую. С включённым VPN обновление ставится за секунды, и туннель сам поднимается снова.
Самообновление закладываем в приложения в разделе Приложения для Android и Windows.
Типичные проблемы
- Первая установка всё равно руками. Самообновление работает только после того, как приложение поставили из файла. Для первой установки раздаём универсальный APK и архив Windows со встроенным установщиком.
- Неудачная замена файлов. Если обновление прервалось на полпути, приложение не должно остаться сломанным: нужен откат к предыдущей версии.
- Ключ подписи — главный секрет. Кто получил закрытый ключ, тот может выпустить «обновление». Поэтому в приложение вшит только открытый ключ, а подпись списка проверяется при каждой проверке обновлений.
- Обновление в неудачный момент. Установка посреди музыки или работы раздражает, поэтому ставится только когда приложение не занято.
Когда это не нужно
Если приложение публикуется в RuStore или Google Play, обновления доставляет магазин, и своё самообновление не нужно. Оно оправдано при раздаче файлом: для внутренних и корпоративных приложений и для тестовых сборок.