README.MD

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

Документация SDK обновления приложения

Оглавление

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

Описание

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

Конвейеры
0 успешных
0 с ошибкой