10.2.0
Общие сведения
RuStore In-app updates SDK поддерживает актуальную версию приложения на устройстве пользователя. Это помогает пользователю увидеть об новления, оценить улучшение производительности и результат исправления ошибок.
Пример реализации
Используйте RuStore In-app updates SDK для реализации различных способов обновлений. В настоящий момент поддерживаются: отложенное, тихое (без UI от RuStore) и принудительное обновление.
Ознакомьтесь с приложением-примером чтобы узнать, как правильно интегрировать SDK обновлений.
Пользовательские сценарии
- Отложенное обновление
- Принудительное обновление
- Тихое обновление



Условия корректной работы SDK
Для работы RuStore In-app updates SDK необходимо соблюдение следующих условий.
- Загружены данные о приложении в разделе Push-уведомления > Проекты из RuStore Консоль.
- Приложение прошло модерацию (публиковать приложение необязательно).
Подпись и package name различных типов сборок вашего приложения (debug, release и т.д.) могут отличаться друг от друга. В таком случае вы должны создать в разделе Push-уведомления > Проекты из RuStore Консоль проект под каждый тип сборки.
- ОС Android версии 7.0 или выше.
- Версия RuStore на устройстве пользователя актуальная.
- Пользователь авторизован в RuStore.
- Приложению RuStore разрешена установка приложений.
Подключение в проект
Для подключения пакета к проекту выполните следующую команду.
flutter pub add flutter_rustore_update
Эта команда добавит строчку в файл pubspec.yaml.
dependencies:
flutter_rustore_update: ^10.2.0
Проверка наличия обновлений
Прежде чем запрашивать обновление, проверьте, доступно ли обновление для вашего приложения. Для проверки наличия обновлений вызовите методinfo(). При вызове данного метода проверяются следующие условия.
- На устройстве пользователя установлена актуальная версия RuStore.
Пользователь и приложение не должны быть заблокированы в RuStore.
.- Приложению RuStore разрешена устан овка приложений.
- Пользователь авторизован в RuStore.
info, который будет содержать в себе информацию о необходимости обновления. Запросите этот объект заранее и закэшируйте его, чтобы запросить у пользователя запуск скачивания обновления без задержки и в удобный для пользователя момент времени.
RustoreUpdateClient.info().then((info) {
print(info);
}).catchError((err) {
print(err);
});
info содержит набор параметров, необходимых для определения доступности обновления.
-
updateAvailability— доступность обновления:UPDATE_AVAILABILITY_UNKNOWN(int == 0) — по умолчанию;UPDATE_AVAILABILITY_NOT_AVAILABLE(int == 1) — обновление не требуется;UPDATE_AVAILABILITY_AVAILABLE(int == 2) — обновление требуется загрузить или обновление уже загружено на устройство пользователя;UPDATE_AVAILABILITY_IN_PROGRESS(int == 3) — обновление уже скачивается или установка уже запущена.
-
installStatus— статус установки обновления, если пользователь уже устанавливает обновление в текущий момент времени:INSTALL_STATUS_UNKNOWN(int == 0) — по умолчанию;INSTALL_STATUS_DOWNLOADED(int == 1) — скачано;INSTALL_STATUS_DOWNLOADING(int == 2) — скачивается;INSTALL_STATUS_FAILED(int == 3) — ошибка;INSTALL_STATUS_INSTALLING(int == 4) — выполняется установка;INSTALL_STATUS_PENDING(int == 5) — в ожидании.
Пакет также предоставляет type-safe представление этих значений:
info.updateAvailabilityValue— значение типаUpdateAvailability;info.installStatusValue— значение типаInstallStatus.
Пример:
RustoreUpdateClient.info().then((info) {
if (info.updateAvailabilityValue == UpdateAvailability.available) {
print('Обновление доступно');
}
});
Запуск скачивания обновления возможен только в том случае, если поле updateAvailability содержит значение UPDATE_AVAILABILITY_AVAILABLE.
Для обратной совместимости в пакете сохранены legacy-константы UPDATE_AILABILITY_*. Для новых интеграций рекомендуется использовать UPDATE_AVAILABILITY_*.
Скачивание и установка обновлений
Отслеживание статуса обновления
После подтве рждения доступности обновления (AppUpdateInfo) вы можете запросить статус скачивания обновления. Для этого подпишитесь на поток статусов обновления.
Проверка статуса скачивания обновления
Для тихого обновления рекомендуется реализовать свой интерфейс.
Используйте RustoreUpdateClient.stateStream.
import 'dart:async';
late final StreamSubscription<RequestResponse> updateSubscription;
void initState() {
super.initState();
updateSubscription = RustoreUpdateClient.stateStream.listen((state) {
switch (state.installStatusValue) {
case InstallStatus.downloaded:
// Обновление готово к установке
break;
case InstallStatus.downloading:
// Здесь можно отобразить прогресс скачивания
print('progress: ${state.downloadProgress}');
break;
case InstallStatus.failed:
print('err ${state.installError.description}');
break;
default:
break;
}
});
}
void dispose() {
updateSubscription.cancel();
super.dispose();
}
stateStream возвращает broadcast Stream<RequestResponse> и подходит для безопасной работы с жизненным циклом экрана или сервиса. После отмены подписки через cancel() поток событий перестаёт поступать в приложение.
Для обратной совместимости также сохранён метод listener(callback), однако для новых интеграций рекомендуется использовать именно stateStream.
Объект state описывает текущий статус скачивания. Ниже представлено содержимое объекта.
-
installStatus— статус установки обновления, если пользователь уже устанавливает обновление в текущий момент времени:INSTALL_STATUS_UNKNOWN(int == 0) — по умолчанию;INSTALL_STATUS_DOWNLOADED(int == 1) — скачано;INSTALL_STATUS_DOWNLOADING(int == 2) — скачивается;INSTALL_STATUS_FAILED(int == 3) — ошибка;INSTALL_STATUS_INSTALLING(int == 4) — выполняется установка;INSTALL_STATUS_PENDING(int == 5) — в ожидании.
-
bytesDownloaded— количество загруженных байт; -
totalBytesToDownload— общее количество байт, которое необходимо скачать; -
installErrorCode— код ошибки во время скачивания. Коды ошибок описаны в разделе Обработка ошибок.
Пакет также предоставляет дополнительные свойства:
state.installStatusValue— значение типаInstallStatus;state.installError— значение типаRustoreUpdateError;state.downloadProgress— прогресс скачивания в диапазоне от 0.0 до 1.0, если общий размер загрузки известен.
Пример отображения прогресса скачивания:
RustoreUpdateClient.stateStream.listen((state) {
if (state.installStatusValue == InstallStatus.downloading) {
print('Downloaded: ${state.bytesDownloaded}/${state.totalBytesToDownload}');
print('Progress: ${state.downloadProgress}');
}
});
В SDK обновлений нет особого статуса для ситуации, когда пользователь отменил скачивание обновления. Если пользователь прервал обновление на этапе скачивания, installStatus возвращает исходный статус INSTALL_STATUS_UNKNOWN (0) с кнопкой Скачать.
Если пользователь уже скачал обновление, но отменил установку, то installStatus вернёт значение INSTALL_STATUS_DOWNLOADED (1).
Рассмотрим следующие варианты.
- Пользователь начал скачивание обновления, но отменил скачивание — в этом случае:
updateAvailability—UPDATE_AVAILABILITY_AVAILABLE(2);installStatus—INSTALL_STATUS_UNKNOWN(0).
- Пользователь скачал файл обновления, но не стал его устанавливать — в этом случае:
updateAvailability—UPDATE_AVAILABILITY_AVAILABLE(2);installStatus—INSTALL_STATUS_DOWNLOADED(1).
Метод RustoreUpdateClient.listener(callback) сохранён для обратной совместимости. Для новых интеграций рекомендуется использовать RustoreUpdateClient.stateStream.