Skip to content

Пример внедрения RuStore SDK обновления приложения

License

Notifications You must be signed in to change notification settings

rustore-dev/rustore-update-java-example

Repository files navigation

Пример внедрения SDK обновлений RuStore

Оглавление

Условия работы SDK обновлений

Для корректной работы SDK необходимо соблюдать следующие условия:

Требования для пользователя:

  • ОС Android версии 7.0 или выше.

  • На устройстве пользователя установлена актуальная версия RuStore.

  • Пользователь авторизован в RuStore.

  • Приложение должно быть опубликовано в RuStore.

  • Приложению RuStore разрешена установка приложений

Требования для разработчика/приложения:

  • ApplicationId, указанный в build.gradle, совпадает с applicationId apk-файла, который вы публиковали в консоль RuStore.

  • Подпись keystore должна совпадать с подписью, которой было подписано приложение, опубликованное в консоль RuStore. Убедитесь, что используемый buildType (пр. debug) использует такую же подпись, что и опубликованное приложение (пр. release).

Подготовка требуемых параметров

  1. applicationId - из приложения, которое вы публиковали в консоль RuStore, находится в файле build.gradle вашего проекта

    android {
        defaultConfig {
            applicationId = "ru.rustore.sdk.appupdateexample"
        }
    }
    
  2. release.keystore - подпись, которой было подписано приложение, опубликованное в консоль RuStore.

  3. release.properties - в этом файле должны быть указаны параметры подписи, которой было подписано приложение, опубликованное в консоль RuStore. Как работать с ключами подписи APK-файлов

Настройка примера приложения

  1. Замените applicationId, в файле build.gradle, на applicationId apk-файла, который вы публиковали в консоль RuStore:

    android {
        defaultConfig {
           applicationId = "ru.rustore.sdk.appupdateexample"
        }
    }
    
  2. В директории cert замените сертификат release.keystore - сертификатом своего приложения, так же в release.properties выполните настройку параметров key_alias, key_password, store_password. Подпись release.keystore должна совпадать с подписью, которой было подписано приложение, опубликованное в консоль RuStore. Убедитесь, что используемый buildType (пр. debug) использует такую же подпись, что и опубликованное приложение (пр. release).

  3. Запустите проект и проверьте работу приложения

Сценарий-использования

Создание менеджера обновлений

Перед вызовом методов библиотеки необходимо создать менеджер обновлений.

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 обновлений, обратитесь по ссылке.

About

Пример внедрения RuStore SDK обновления приложения

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages