Привет! Выпейте кофе ☕ и узнайте, как реализовать обновления в приложении с помощью API, предоставленного Google Play.

Настраивать

Первое, что нужно сделать, это добавить зависимость для этой функции. Итак, откройте :app/build.gradle.kts и добавьте эту зависимость.

dependencies {
    implementation("com.google.android.play:app-update-ktx:2.1.0")
}

Проверьте наличие обновлений

Для этого мы создадим новую функцию, которая будет использовать AppUpdateManager. Откройте MainActivity.kt и начнем писать код.

Давайте создадим updateType и AppUpdateManager, которые будут инициализированы позже в функции onCreate.

private lateinit var appUpdateManager: AppUpdateManager
private var updateType = AppUpdateType.IMMEDIATE

Теперь создайте функцию checkForUpdates и начнем с создания ActivityResultLauncher. Это будет использоваться для запуска потока обновлений в приложении.

fun checkForUpdates() {
    val activityResultLauncher = registerForActivityResult(
        ActivityResultContracts.StartIntentSenderForResult()
    ) { result ->
        if (result.resultCode != RESULT_OK) {
            Log.d("Update result", "Update flow failed! Result code: $result.resultCode");
        }
    }

    // TODO: ("Create the listener")
}

После этого мы должны создать прослушиватель, чтобы проверить, доступно ли и разрешено ли обновление. Если да, мы начнем процесс обновления. Это обрабатывает обновления как FLEXIBLE, так и IMMEDIATE.

fun checkForUpdates() {
    // ...
    appUpdateManager.appUpdateInfo.addOnSuccessListener { appUpdateInfo ->
        val isAvailable =
            appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
        val isAllowed = when (updateType) {
            AppUpdateType.IMMEDIATE -> appUpdateInfo.isImmediateUpdateAllowed
            AppUpdateType.FLEXIBLE -> appUpdateInfo.isFlexibleUpdateAllowed
            else -> false
        }
        if (isAvailable && isAllowed) {
            appUpdateManager.startUpdateFlowForResult(
                appUpdateInfo,
                activityResultLauncher,
                AppUpdateOptions.newBuilder(updateType).build()
            )
        }
    }
}