-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Версия rustore-bom = “2025.02.01”.
AppUpdateType.FLEXIBLE
В README.MD указано, что установкy обновления(completeUpdate) нужно делать после того как скачали обновление (т.е. когда от InstallStateUpdateListener получаем InstallStatus.DOWNLOADED)
При непрерывном сценарии все работает хорошо:
InstallStatus: Pending->DOWNLOADING->DOWNLOADED -> вызвали completeUpdate()
Логи:
2025-06-24 14:06:30.048 29826-29826 testing_update usap64 D startUpdateFlow addOnSuccessListener: -1 (false)
2025-06-24 14:06:30.048 29826-29826 testing_update usap64 D Activity.RESULT_OK -> {
2025-06-24 14:06:30.160 29826-29826 testing_update usap64 D Update pending...
2025-06-24 14:06:30.194 29826-29826 testing_update usap64 D Download progress: 0/54463185 bytes
2025-06-24 14:06:32.313 29826-29826 testing_update usap64 D Download progress: 933582/54463185 bytes
2025-06-24 14:06:33.328 29826-29826 testing_update usap64 D Download progress: 7897088/54463185 bytes
2025-06-24 14:06:34.336 29826-29826 testing_update usap64 D Download progress: 16039738/54463185 bytes
2025-06-24 14:06:35.322 29826-29826 testing_update usap64 D Download progress: 24002542/54463185 bytes
2025-06-24 14:06:36.341 29826-29826 testing_update usap64 D Download progress: 32276372/54463185 bytes
2025-06-24 14:06:37.329 29826-29826 testing_update usap64 D Download progress: 40320934/54463185 bytes
2025-06-24 14:06:38.317 29826-29826 testing_update usap64 D Download progress: 48365460/54463185 bytes
2025-06-24 14:06:39.156 29826-29826 testing_update usap64 D InstallStatus.DOWNLOADED
2025-06-24 14:06:39.156 29826-29826 testing_update usap64 D completeUpdate started
Но, если приложение закрыли при скачивании обновления, и открыли приложение заново, когда установочный файл уже скачен, то после клика по “Обновить” в диалоге, срабатывает только add у startUpdateFlow (с Activity.RESULT_OK), а InstallStateUpdateListener нет.
Логи:
2025-06-24 14:13:16.485 5389-5389 testing_update usap64 D startUpdateFlow addOnSuccessListener: -1 (false)
2025-06-24 14:13:16.485 5389-5389 testing_update usap64 D Activity.RESULT_OK -> {
Так как InstallStateUpdateListener и InstallStatus.DOWNLOADED не срабатывает, то нет понимания когда вызывать completeUpdate()
Ожидаемое поведение, когда установочный файл был уже скачен ранее:
InstallStateUpdateListener присылает сразу “InstallStatus.DOWNLOADED”.
Код для startUpdateFlow:
private fun startUpdateFlow(appUpdateInfo: AppUpdateInfo, appUpdateType: Int) {
try {
ruStoreAppUpdateManager?.registerListener(createInstallListener())
val appUpdateOptions = AppUpdateOptions.Builder()
.appUpdateType(appUpdateType)
.build()
Log.d(TAG,"startUpdateFlow appUpdateType: $appUpdateType ")
ruStoreAppUpdateManager?.startUpdateFlow(
appUpdateInfo,
appUpdateOptions,
)?.addOnSuccessListener { resultCode ->
Log.d(
TAG,
"startUpdateFlow addOnSuccessListener: $resultCode (${resultCode == Activity.RESULT_CANCELED})"
)
when (resultCode) {
Activity.RESULT_CANCELED -> {
updateListener?.onUpdateCancelled()
}
Activity.RESULT_OK -> {
Log.d(TAG, "Activity.RESULT_OK -> {")
/** Когда апк уже скачен и приложение снова открыли, то получаем RESULT_OK , а InstallStateUpdateListener молчит */
}
}
}?.addOnFailureListener { error ->
updateListener?.onUpdateFailed(error)
Log.e(TAG, "Failed to start flexible update flow", error)
}
} catch (e: IntentSender.SendIntentException) {
updateListener?.onUpdateFailed(e)
Log.e(TAG, "Failed to start flexible update", e)
}
}
private fun createInstallListener() = object : InstallStateUpdateListener {
override fun onStateUpdated(state: InstallState) {
installStateUpdateListenerInvoked = true
when (state.installStatus) {
InstallStatus.DOWNLOADING -> {
val bytesDownloaded = state.bytesDownloaded
val totalBytes = state.totalBytesToDownload
updateListener?.onDownloadProgress(bytesDownloaded, totalBytes)
Log.d(TAG, "Download progress: $bytesDownloaded/$totalBytes bytes")
}
InstallStatus.DOWNLOADED -> {
Log.d(TAG, "InstallStatus.DOWNLOADED")
updateListener?.onDownloadComplete()
completeUpdate(updateType)
}
InstallStatus.INSTALLING -> {
updateListener?.onStartInstalling()
Log.d(TAG, "Installing update...")
}
InstallStatus.FAILED -> {
updateListener?.onUpdateFailed(Exception("Installation failed"))
Log.e(TAG, "Update installation failed")
}
InstallStatus.UNKNOWN -> {
updateListener?.onUpdateCancelled()
Log.d(TAG, "Update cancelled by user")
}
InstallStatus.PENDING -> {
Log.d(TAG, "Update pending...")
}
else -> {
Log.d(TAG, "Unknown install status: ${state.installStatus}")
}
}
}
}
насколько я понимаю, я сам вызвать текущий статус InstallStateUpdateListener не могу, есть только onStateUpdated метод:
public fun interface InstallStateUpdateListener {
public abstract fun onStateUpdated(state: ru.rustore.sdk.appupdate.model.InstallState): kotlin.Unit
}
И у RuStoreAppUpdateManager также нет метода получения метода для статуса скачивания:
public interface RuStoreAppUpdateManager {
public abstract fun completeUpdate(appUpdateOptions: ru.rustore.sdk.appupdate.model.AppUpdateOptions): ru.rustore.sdk.core.tasks.Task<kotlin.Unit>
public abstract fun getAppUpdateInfo(): ru.rustore.sdk.core.tasks.Task<ru.rustore.sdk.appupdate.model.AppUpdateInfo>
public abstract fun registerListener(listener: ru.rustore.sdk.appupdate.listener.InstallStateUpdateListener): kotlin.Unit
public abstract fun startUpdateFlow(appUpdateInfo: ru.rustore.sdk.appupdate.model.AppUpdateInfo, appUpdateOptions: ru.rustore.sdk.appupdate.model.AppUpdateOptions): ru.rustore.sdk.core.tasks.Task<kotlin.Int>
public abstract fun unregisterListener(listener: ru.rustore.sdk.appupdate.listener.InstallStateUpdateListener): kotlin.Unit
}
}
Т.е. если InstallStateUpdateListener не срабатывает, то я не могу узнать что апк обновления уже скачено.