API обновления приложений всегда возвращает 1 (UPDATE_NOT_AVAILABLE)

Я использую In-App Update API в приложении для обновления приложения, пока новая версия доступна в игровом магазине.

модуль gradle

defaultConfig {
        applicationId "xxx.xxxxx"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode rootProject.ext.vCode
        versionName rootProject.ext.vName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

Последняя загруженная версия (доступна в PlayStore)

vCode = 5
vName = "1.0.4"

проект Gradle (понизьте его для тестирования)

vCode = 4
vName = "1.0.3"

Понизьте эту версию, чтобы получить доступное тестовое обновление или нет.

MainActivity.kt

class MainActivity : AppCompatActivity() {
    private var appUpdateManager: AppUpdateManager? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        appUpdateManager = AppUpdateManagerFactory.create(this)
    }

    override fun onResume() {
        super.onResume()
            checkForVersionUpdate()
    }


    private fun checkForVersionUpdate() {
            appUpdateManager?.appUpdateInfo?.addOnSuccessListener { appUpdateInfo ->
                if ((appUpdateInfo.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS)) {
                    // If an in-app update is already running, resume the update.
                    startUpdateFlow(appUpdateInfo)
                } else if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                        && appUpdateInfo.isUpdateTypeAllowed(IMMEDIATE)) {
                    startUpdateFlow(appUpdateInfo)
                }
            }
    }

    private fun startUpdateFlow(appUpdateInfo: AppUpdateInfo) {
        try {
            appUpdateManager?.startUpdateFlowForResult(
                    appUpdateInfo,
                    IMMEDIATE,
                    this,
                    123)
        } catch (e: InvocationTargetException) {
            e.printStackTrace()
        } catch (e: IntentSender.SendIntentException) {
            e.printStackTrace()
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (requestCode == 123) {
            if (resultCode != RESULT_OK) {
                Log.i("Update failed code:", resultCode.toString())
                // If the update is cancelled or fails,
                // you can request to start the update again.
            } else if(resultCode == RESULT_CANCELED)
                checkForVersionUpdate()
        }
    }
}

В последний раз я загружал сборку в Play Store вместе с App Bundle (.aab) и открытой бета-версией.

Пробовал следующие способы.

  • Подпишите apk с тем же именем пакета.
  • Очистите кеш и хранилище APK Playstore.
  • Загрузите apk из игрового магазина и удалите его с устройства. затем, после перехода на более раннюю версию, подпишите apk и установите его на устройство. По-прежнему не отображается диалоговое окно обновления приложения.

person Mehul Kabaria    schedule 03.07.2019    source источник
comment
Я столкнулся с той же проблемой. Удалось ли вам разобраться?   -  person Chandrakanth    schedule 27.10.2020


Ответы (5)


В отличие от других ответов, в которых говорится, что тестовая сборка должна находиться в режиме выпуска или должна быть загружена на тестовую дорожку Play Console - это все неправильно, нигде в документации нет упоминания об этом.

Если вы соответствуете требованиям API> = 21 && есть подключение к Интернету и сталкиваетесь с этой проблемой, выполните следующие действия для решения:

  • Убедитесь, что ваша тестовая сборка имеет более низкий код версии, чем производственная версия.
  • Очистить хранилище и кеш для приложения PlayStore
  • Откройте игровой магазин, используя учетную запись, с которой ранее было загружено приложение.
  • Перейдите к списку приложений в PlayStore и убедитесь, что отображается кнопка «Обновить».

Похоже, проблема с кешированием в PlayStore, и приведенные выше шаги обновляют ее. После этого вы сможете тестировать обновления в приложении даже в режиме отладки.

person AlexVPerl    schedule 18.09.2019

Что помогает мне во время тестирования, так это открытие приложения Google Play Store и открытие позиции «Мои приложения и игры» из меню ящика.

Убедитесь, что на вкладке «Обновления» ваше протестированное приложение отображается в списке «Ожидающие обновления».

Эта библиотека, на мой взгляд, не проверяет некоторые API Google, есть ли какие-либо обновления, но проверяет какой-то кеш приложения магазина Google Play

Надеюсь, это поможет подбадривает Войтек

person wojciech_maciejewski    schedule 02.06.2020
comment
Похоже, он работает именно так, как вы описали. - person Roman Samoilenko; 21.01.2021

Убедись:

  1. вы устанавливаете версию подписанного выпуска для тестирования

  2. с тем же applicationId, что и в Play Store (в вашем вкусе нет applicationIdSuffix)

  3. и versionCode ниже

  4. и ваше приложение выпущено (вы можете скачать его в качестве тестера)

person ildar ishalin    schedule 08.08.2019
comment
Подписанный релиз не требуется, пл. обратитесь к одному из других ответов здесь. - person AlexVPerl; 21.11.2019

Я также столкнулся с той же проблемой, и ни одно из вышеперечисленных решений не сработало. Я понимаю, что если versionCode увеличивается в build.gradle, он будет идентифицироваться как обновление.

Я следовал приведенной ниже последовательности.

  • Предположим, ваш текущий versionCode в build.gradle - 10, а versionName - 1.10, и ваше приложение поддерживает обновления в приложении (требуется код для проверки наличия обновлений).
  • Создайте отладочный apk
  • Загрузите его в https://play.google.com/console/internal-app-sharing
  • Установите приложение на тестовое устройство с помощью ссылки для скачивания приложения.
  • Откройте приложение хотя бы один раз на тестовом устройстве
  • Теперь измените versionCode на 11 и versionName на 1.11 в приложении build.gradle
  • Создайте приложение отладки, загрузите его во внутренний каталог приложений и получите ссылку для загрузки приложения.
  • В вашем тестовом устройстве откройте вторую ссылку для загрузки хотя бы один раз (просто откройте - не нажимайте кнопку «Обновить»)
  • Теперь откройте приложение приложение, оно покажет диалоговое окно обновления приложения.
person Chandrakanth    schedule 28.10.2020

Вот как я тестирую свое обновление в приложении, и оно подтверждается, что каждый раз при развертывании у меня оно работает.

Я использую внутренний тестовый трек и увеличиваю код версии.

  1. используйте магазин Google Play, чтобы установить версию тестового приложения (я использовал внутреннее развертывание тестовой дорожки)

  2. развернуть другую версию с более высоким КОДОМ ВЕРСИИ в Play Console (тот же внутренний тестовый трек)

  3. закройте приложение для тестирования и магазин Google Play (не просто вернитесь домой, используйте недавний ключ и смахните их)

  4. откройте магазин Google Play и убедитесь, что для тестируемого приложения доступно обновление (вы можете проверить его в разделе «Мои приложения и игра»> Установлено)

  5. теперь откройте приложение для тестирования и проверьте наличие UPDATE_AVAILABLE

У меня это работает почти сразу после развертывания

Android In-App Update Api показывает UPDATE_NOT_AVAILABLE

person wMaN    schedule 08.09.2019