flutter_rustore_update 2.0.0 flutter_rustore_update: ^2.0.0 copied to clipboard
Flutter RuStore Update SDK.
flutter_rustore_update #
Документация RuStore #
Общее #
RuStore In-app updates SDK помогает поддерживать актуальную версию вашего приложения на устройстве пользователя.
Когда пользователи поддерживают приложение в актуальном состоянии, они могут опробовать новые функции, а также воспользоваться улучшениями производительности и исправлениями ошибок.
Вы можете использовать RuStore In-app updates SDK для отображения процесса обновления приложения, который обеспечивает фоновую загрузку и установку обновления с контролем состояния. Пользователь сможет использовать ваше приложение в момент загрузки обновления.
Пример пользовательского сценария #
Условия корректной работы SDK #
Для работы RuStore In-app updates SDK необходимо соблюдение следующих условий:
- ОС Android версии 7.0 или выше.
- На устройстве пользователя должен быть установлен RuStore.
- Версия RuStoreApp на устройстве пользователя должна быть актуальной.
- Приложению RuStore должна быть разрешена установка приложений.
Пример реализации #
Для того, чтобы узнать как правильно интегрировать пакет для работы с push-уведомлениями, рекомендуется ознакомиться с приложением-примером
https://gitflic.ru/project/rustore/flutter-rustore-update
Подключение в проект #
Для подключения пакета к проекту нужно выполнить команду
flutter pub add flutter_rustore_update
Эта команда добавит строчку в файл pubspec.yaml
dependencies:
flutter_rustore_update: ^2.0.0
Проверка наличия обновлений #
Прежде чем запрашивать обновление, проверьте, доступно ли обновление для вашего приложения. Для проверки наличия обновлений вызовите метод info(). При вызове данного метода проверяются следующие условия:
- На устройстве пользователя должен быть установлен RuStore.
- Версия RuStoreApp на устройстве пользователя должна быть актуальной.
- Пользователь и приложение не должны быть заблокированы в RuStore.
В ответ на данный метод вы получите объект info, который будет содержать в себе информацию о необходимости обновления.
RustoreUpdateClient.info().then((info) {
print(info);
}).catchError((err) {
print(err);
});
Объект info содержит набор параметров, необходимых для определения доступности обновления:
- updateAvailability - доступность обновления:
- UPDATE_AILABILITY_NOT_AVAILABLE - обновление не нужно.
- UPDATE_AILABILITY_AVAILABLE - обновление требуется загрузить или обновление уже загружено на устройство пользователя.
- UPDATE_AILABILITY_IN_PROGRESS - обновление уже скачивается или установка уже запущена.
- UPDATE_AILABILITY_UNKNOWN - статус по умолчанию.
- installStatus - статус установки обновления, если пользователь уже устанавливает обновление в текущий момент времени:
- INSTALL_STATUS_DOWNLOADED - скачано.
- INSTALL_STATUS_DOWNLOADING - скачивается.
- INSTALL_STATUS_FAILED - ошибка.
- INSTALL_STATUS_INSTALLING - устанавливается.
- INSTALL_STATUS_PENDING - в ожидании.
- INSTALL_STATUS_UNKNOWN - по умолчанию.
Запуск скачивания обновления возможен только в том случае, если поле updateAvailability содержит значение UPDATE_AILABILITY_AVAILABLE.
Метод может вернуть ошибку, детально со списком ошибок можно ознакомиться в разделе *Возможные ошибки.
Скачивание обновления #
После подтверждения доступности обновления вы можете запросить у пользователя скачивание обновления, но перед этим необходимо запустить слушатель статуса скачивания обновления, используя метод listener()
RustoreUpdateClient.listener((value) {
print("listener installStatus ${value.installStatus}");
print("listener bytesDownloaded ${value.bytesDownloaded}");
print("listener totalBytesToDownload ${value.totalBytesToDownload}");
print("listener installErrorCode ${value.installErrorCode}");
if (value.installStatus == INSTALL_STATUS_DOWNLOADED) {
// тут можно вызывать метод complete()
}
});
Объект state описывает текущий статус скачивания обновления. Объект содержит:
- installStatus - статус установки обновления, если пользователь уже устанавливает обновление в текущий момент времени:
- INSTALL_STATUS_DOWNLOADED - скачано.
- INSTALL_STATUS_DOWNLOADING - скачивается.
- INSTALL_STATUS_FAILED - ошибка.
- INSTALL_STATUS_INSTALLING - устанавливается.
- INSTALL_STATUS_PENDING - в ожидании.
- INSTALL_STATUS_UNKNOWN - по умолчанию.
- bytesDownloaded - количество загруженных байт.
- totalBytesToDownload - общее количество байт, которое необходимо скачать.
- installErrorCode - код ошибки во время скачивания. Детальнее с возможными ошибками можно ознакомиться в разделе Возможные ошибки.
Отложенное обновление #
Скачивание с UI от RuStore
Для запуска скачивания обновления приложения вызовите метод download().
RustoreUpdateClient.download().then((value) {
print("download code ${value.code}");
}).catchError((err) {
print("download err ${err}");
});
Если пользователь подтвердил скачивание обновления, то value.code = ACTIVITY_RESULT_OK, если отказался, то value.code = ACTIVITY_RESULT_CANCELED.
После вызова метода вы можете следить за статусом скачивания обновления в слушателе. Если в слушателе вы получили статус INSTALL_STATUS_DOWNLOADED, то вы можете вызвать метод установки обновления complete(). Рекомендуем уведомить пользователя о готовности установки обновления.
Метод может вернуть ошибку. Детальнее со списком ошибок можно ознакомиться в разделе Возможные ошибки.
Принудительное обновление #
Скачивание с UI от RuStore
Для запуска скачивания принудительного обновления приложения вызовите метод immediate()
.
RustoreUpdateClient.immediate().then((value) {
print("silent code ${value.code}");
}).catchError((err) {
print("immediate err ${err}");
});
resultCode (Int)
:
ACTIVITY_RESULT_OK (-1)
— обновление выполнено, код может не быть получен, т. к. приложение в момент обновления завершается.ACTIVITY_RESULT_CANCELED (0)
— флоу прервано пользователем, или произошла ошибка. Предполагается, что при получении этого кода следует завершить работу приложения.ACTIVITY_RESULT_NOT_FOUND (2)
— RuStore не установлен, либо установлена версия, которая не поддерживает принудительное обновление (RuStore versionCode
<191
).
throwable
— ошибка старта сценария обновления.
При успешном обновлении дальнейших действий не требуется.
Тихое обновление #
Скачивание без UI от RuStore
Для данного типа обновления рекомендуется реализовать свой интерфейс.
Для запуска скачивания тихого обновления приложения вызовите метод silent()
.
RustoreUpdateClient.silent().then((value) {
print("silent code ${value.code}");
}).catchError((err) {
print("silent err ${err}");
});
При вызове then
с code = ACTIVITY_RESULT_OK
будет зарегистрирована задача на скачивание обновления.
В данном сценарии может быть вызван только then
с ACTIVITY_RESULT_OK
, либо catchError
.
После вызова метода вы можете следить за статусом скачивания обновления в слушателе.
После получения статуса INSTALL_STATUS_DOWNLOADED
вы можете вызвать метод установки обновления complete(). Рекомендуется уведомить пользователя о готовности обновления к установке.
Установка обновления #
После завершения скачивания apk-файла обновления вы можете запустить установку обновления. Для запуска установки обновления вызовите метод complete().
RustoreUpdateClient.complete().catchError((err) {
print("complete err ${err}");
});
Обновление происходит через нативный инструмент android. В случае успешного обновления приложение закроется.
На этапе обновления могут возникнуть ошибки. Детальнее с ними можно ознакомиться в разделе Возможные ошибки.
Возможные ошибки #
Если вы получили в ответ onFailure, то не рекомендуем самостоятельно отображать ошибку пользователю. Отображение ошибки может негативно повлиять на пользовательский опыт.
Список возможных ошибок:
- UPDATE_ERROR_DOWNLOAD - Ошибка при скачивании.
- UPDATE_ERROR_BLOCKED - Установка заблокированна системой.
- UPDATE_ERROR_INVALID_APK - Некорректный APK обновления.
- UPDATE_ERROR_CONFLICT - Конфликт с текущей версией приложения.
- UPDATE_ERROR_STORAGE - Недостаточно памяти на устройстве.
- UPDATE_ERROR_INCOMPATIBLE - Несовместимо с устройством.
- UPDATE_ERROR_APP_NOT_OWNED - Приложение не куплено.
- UPDATE_ERROR_INTERNAL_ERROR - Внутренняя ошибка.
- UPDATE_ERROR_ABORTED - Пользователь отказался от установки обновления.
- UPDATE_ERROR_APK_NOT_FOUND - apk для запуска установки не найден.
- UPDATE_ERROR_EXTERNAL_SOURCE_DENIED - Запуск обновления запрещён. Например, в первом методе вернулся ответ о том, что обновление недоступно, но пользователь вызывает второй метод.