Пример внедрения SDK обновлений RuStore
Документация SDK обновления приложения
Оглавление
- Условия работы SDK обновлений
- Подготовка требуемых параметров
- Настройка примера приложения
- Сценарий использования
- Условия распространения
- Техническая поддержка
Условия работы SDK обновлений
Для корректной работы SDK необходимо соблюдать следующие условия:
Требования для пользователя:
-
ОС Android версии 7.0 или выше.
-
На устройстве пользователя установлена актуальная версия RuStore.
-
Пользователь авторизован в RuStore.
-
Приложение должно быть опубликовано в RuStore.
-
Приложению RuStore разрешена установка приложений
Требования для разработчика/приложения:
-
ApplicationId, указанный в build.gradle, совпадает с applicationId apk-файла, который вы публиковали в консоль RuStore.
-
Подпись keystore должна совпадать с подписью, которой было подписано приложение, опубликованное в консоль RuStore. Убедитесь, что используемый buildType (пр. debug) использует такую же подпись, что и опубликованное приложение (пр. release).
Подготовка требуемых параметров
-
applicationId
- из приложения, которое вы публиковали в консоль RuStore, находится в файле build.gradle вашего проектаandroid { defaultConfig { applicationId = "ru.rustore.sdk.appupdateexample" } }
-
release.keystore
- подпись, которой было подписано приложение, опубликованное в консоль RuStore. -
release.properties
- в этом файле должны быть указаны параметры подписи, которой было подписано приложение, опубликованное в консоль RuStore. Как работать с ключами подписи APK-файлов
Настройка примера приложения
-
Замените
applicationId
, в файле build.gradle, на applicationId apk-файла, который вы публиковали в консоль RuStore:android { defaultConfig { applicationId = "ru.rustore.sdk.appupdateexample" } }
-
В директории
cert
замените сертификатrelease.keystore
- сертификатом своего приложения, так же вrelease.properties
выполните настройку параметровkey_alias
,key_password
,store_password
. Подписьrelease.keystore
должна совпадать с подписью, которой было подписано приложение, опубликованное в консоль RuStore. Убедитесь, что используемыйbuildType
(пр. debug) использует такую же подпись, что и опубликованное приложение (пр. release). -
Запустите проект и проверьте работу приложения
Сценарий-использования
Создание менеджера обновлений
Перед вызовом методов библиотеки необходимо создать менеджер обновлений.
RuStoreAppUpdateManager ruStoreAppUpdateManager = RuStoreAppUpdateManagerFactory.INSTANCE.create(context);
Проверка доступности обновления
Сначала нужно проверить доступность обновления для вашего приложения:
ruStoreAppUpdateManager
.getAppUpdateInfo()
.addOnSuccessListener(appUpdateInfo -> {
if (appUpdateInfo.updateAvailability == UpdateAvailability.UPDATE_AVAILABLE) {
// Обновление доступно
}
})
.addOnFailureListener(throwable ->
Log.e(TAG, "getAppUpdateInfo error", throwable)
);
Запуск скачивания обновления
Если обновление доступно, можно запускать метод startUpdateFlow
:
ruStoreAppUpdateManager.startUpdateFlow(appUpdateInfo, new AppUpdateOptions.Builder().build())
.addOnSuccessListener(resultCode -> {
if (resultCode == Activity.RESULT_CANCELED) {
// Пользователь отказался от скачивания
}
})
.addOnFailureListener(throwable ->
Log.e(TAG, "startUpdateFlow error", throwable)
);
Данный метод отображает пользователю диалог с подтверждением скачивания. Если пользователь соглашается, то метод возвращает Activity.RESULT_OK, иначе Activity.RESULT_CANCELED. Обратите внимание - каждый объект AppUpdateInfo
может использовать только один раз. Для повторного вызова метода нужно запросить его снова.
В startUpdateFlow
можно передать параметр обновления, на текущий момент их 3:
- AppUpdateOptions.Builder().build() - отложенное обновление(по умолчанию)
- AppUpdateOptions.Builder().appUpdateType(AppUpdateType.IMMEDIATE).build() - принудительное обновление
- AppUpdateOptions.Builder().appUpdateType(AppUpdateType.SILENT).build() - тихое обновление
Установка обновления
После того как обновление скачано, можно запускать установку. Для запуска установки обновления вызовите метод completeUpdate(appUpdateOptions: AppUpdateOptions). В метод можно передавать только 2 типа завершения установки FLEXIBLE и SILENT, Отложенное и тихое обновление соответственно.
ruStoreAppUpdateManager.completeUpdate(new AppUpdateOptions.Builder().appUpdateType(AppUpdateType.SILENT).build())
.addOnFailureListener(throwable -> {
Log.d("TAG", "Throwable: " + throwable);
});
- Тип обновлений FLEXIBLE - приложение перезапустится.
- Тип обновлений SILENT - приложение закроется без перезапуска.
Использование слушателя (listener)
Для отслеживания статуса скачивания обновления можно зарегистрировать слушатель:
private final InstallStateUpdateListener installStateUpdateListener = installState -> {
switch (installState.installStatus) {
case InstallStatus.DOWNLOADED -> {
// Скачивание завершено, можно запускать установку обновления
}
case InstallStatus.DOWNLOADING -> {
val totalBytes = installState.totalBytesToDownload
val bytesDownloaded = installState.bytesDownloaded
// Скачивание в процессе. Можно, например, отобразить ProgressBar
}
case InstallStatus.FAILED -> {
// В процессе скачивания возникла ошибка
}
}
}
// Перед тем как начинать скачивание обновления, добавьте слушатель
ruStoreAppUpdateManager.registerListener(installStateUpdateListener)
// Когда отслеживание статуса больше не нужно - удалите слушатель
ruStoreAppUpdateManager.unregisterListener(installStateUpdateListener)
Условия распространения
Данное программное обеспечение, включая исходные коды, бинарные библиотеки и другие файлы распространяется под лицензией MIT. Информация о лицензировании доступна в документе MIT-LICENSE.txt
Техническая поддержка
Если появились вопросы по интеграции SDK обновлений, обратитесь по ссылке.
Описание
Пример внедрения RuStore SDK обновления приложения