Перейти к основному содержимому

Скачивание и установка обновлений

примечание

Сведения о скачивании обновления представлены для следующих языков программирования:

  • Kotlin;
  • Java;
  • Unity;
  • Godot;
  • Flutter;
  • Unreal Engine;
  • Defold.

Использование слушателя (listener)

После подтверждения доступности обновления (AppUpdateInfo) вы можете запросить статус скачивания обновления — для этого запустите слушатель статуса скачивания обновления.

Проверка статуса скачивания обновления

подсказка

Для тихого обновления рекомендуется реализовать свой интерфейс.

Проверка статуса скачивания

Используйте метод registerListener() (см. ниже).

updateManager.registerListener { state ->
if (state.installStatus == InstallStatus.DOWNLOADED) {
// Update is ready to install
}
}

Объект state описывает текущий статус скачивания обновления. Ниже представлено содержимое объекта.

  • installStatus — статус установки обновления, если пользователь уже устанавливает обновление в текущий момент времени:
    • DOWNLOADED (1) — скачано;
    • DOWNLOADING (2) — скачивается;
    • FAILED (3) — ошибка;
    • INSTALLING (4) - устанавливается;
    • PENDING (5) — в ожидании;
    • UNKNOWN (0) — по умолчанию;
  • bytesDownloaded — количество загруженных байт.
  • totalBytesToDownload — общее количество байт, которое необходимо скачать;
  • installErrorCode — код ошибки во время скачивания. Детальнее с возможными ошибками можно ознакомиться в разделе Возможные ошибки.

Удаление слушателя

Если необходимости в слушателе больше нет, воспользуйтесь методом удаления слушателя unregisterListener(), передав в метод ранее зарегистрированный слушатель.

к сведению

Сведения об удалении слушателя представлены для следующих языков:

  • Kotlin;
  • Java;
  • Java;
  • Unity;
  • Godot
  • Unreal Engine;
  • Defold.
updateManager.unregisterListener(listener)

Запуск скачивания обновления

Отложенное обновление

Для запуска скачивания обновления приложения вызовите метод startUpdateFlow(), поместив в него объект AppUpdateInfo, полученный в методе getAppUpdateInfo().

к сведению

Объект AppUpdateInfo после однократного использования становится невалидным. Для повторного вызова метода startUpdateFlow() запросите AppUpdateInfo повторно используя метод getAppUpdateInfo().

updateManager
.startUpdateFlow(appUpdateInfo, AppUpdateOptions.Builder().build())
.addOnSuccessListener { resultCode ->
}
.addOnFailureListener { throwable ->
}

Если пользователь подтвердил скачивание обновления, то resultCode = Activity.RESULT_OK, если отказался, то resultCode = Activity.RESULT_CANCEL.

После получения статуса DOWNLOADED в слушателе возможно вызвать метод установки обновления. Рекомендуется уведомить пользователя о том, что обновление готово к установке.

Метод может вернуть ошибку. Детальнее со списком ошибок можно ознакомиться в разделе Возможные ошибки.

По завершении скачивания необходимо выполнить завершение обновления (completeUpdate).

Принудительно обновление

примечание

Описание скачивания для принудительного обновления описано для следующих языков:

  • Kotlin;
  • Java;
  • Flutter.

Проверка доступности принудительного обновления

После получения AppUpdateInfo можно проверить доступность принудительного обновления.

if (appUpdateInfo.isUpdateTypeAllowed(IMMEDIATE)) {
TODO()
}

Результат функции isUpdateTypeAllowed рекомендуется использовать для принятия решения о запуске принудительного обновления, но данный результат не влияет на возможность запуска сценария. Необходимость запуска сценария обновления может происходить по вашей внутренней логике.

Запуск сценария обновления

Для запуска сценария обновления используйте метод startUpdateFlow().

updateManager
.startUpdateFlow(appUpdateInfo, AppUpdateOptions.Builder().appUpdateType(IMMEDIATE).build())
.addOnSuccessListener { resultCode ->

}
.addOnFailureListener { throwable ->

}

resultCode (Int):

  • Activity.RESULT_OK (-1) — обновление выполнено, код может не быть получен, т. к. приложение в момент обновления завершается.
  • Activity.RESULT_CANCELED (0) — флоу прервано пользователем или произошла ошибка. Предполагается, что при получении этого кода следует завершить работу приложения.
  • ActivityResult.ACTIVITY_NOT_FOUND (2) — RuStore не установлен, либо установлена версия, которая не поддерживает принудительное обновление (RuStore versionCode < 191).

throwable — ошибка старта сценария обновления.

При успешном обновлении дальнейших действий не требуется.

В процессе скачивания могут возникнуть ошибки, с ними можно ознакомиться в разделе Возможные ошибки.

Тихое обновление

примечание

Сведения о скачивании обновления представлены для следующих языков программирования:

  • Kotlin;
  • Java;
  • Flutter.

Для запуска скачивания обновления приложения необходимо вызвать метод startUpdateFlow() с аргументом AppUpdateInfo, полученный в методе getAppUpdateInfo(), и установить тип обновления в AppUpdateOptions в значение SILENT.

предупреждение

Объект AppUpdateInfo после однократного использования становится невалидным. Для повторного вызова метода startUpdateFlow() запросите AppUpdateInfo повторно используя метод getAppUpdateInfo().

val appUpdateOptions = AppUpdateOptions.Builder().appUpdateType(SILENT).build()

updateManager
.startUpdateFlow(appUpdateInfo, appUpdateOptions)
.addOnSuccessListener { resultCode ->

}
.addOnFailureListener { throwable ->

}

При вызове onSuccessListener с resultCode = Activity.RESULT_OK будет зарегистрирована задача на скачивание обновления.

В данном сценарии может быть вызван только onSuccessListener с resultCode = Activity.RESULT_OK либо onFailureListener.

После получения статуса DOWNLOADED в слушателе возможно вызвать метод установки обновления (completeUpdate). Рекомендуется уведомить пользователя, что обновление готово к установке.

Метод может вернуть ошибку. Детальнее со списком ошибок можно ознакомиться в разделе Возможные ошибки.

Установка обновления

Для запуска установки обновления вызовите метод completeUpdate().

updateManager
.completeUpdate()
.addOnFailureListener { throwable ->

}

Обновление происходит через нативный инструмент Android. В случае успешного обновления приложение закроется.

На этапе обновления могут возникнуть ошибки — см. раздел Возможные ошибки.