Какую цель выполняет appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE) в API-интерфейсе обновления приложений для Android?

Я уже давно следую за обновлением API в приложениях для Android и не могу найти какое-либо отношение к следующей строке:

appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)

-

appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)

Этот метод isUpdateTypeAllowed() был использован в приведенном ниже фрагменте кода в документации Android: https://developer.android.com/guide/app-bundle/in-app-updates. Более того, два вышеупомянутых вызова метода возвращают true во всех случаях, и я не могу найти случай, для которого любой из двух вышеупомянутых вызовов метода возвращает false.

5 ответов

Эти методы всегда будут возвращать значение true, если в магазине воспроизведения есть новое обновление, а текущая версия приложения на устройстве меньше версии приложения в магазине воспроизведения. Чтобы определить, является ли обновление гибким или немедленным, нам нужно установить флаг для ГИБКОГО или НЕМЕДЛЕННОГО ОБНОВЛЕНИЯ в удаленной конфигурации, например {"upgradeType":0/1}, где 0 = ГИБКОЕ и 1 = НЕМЕДЛЕННОЕ. На данный момент у нас нет возможности в консоли игрового магазина установить флаг для ГИБКОГО или НЕМЕДЛЕННОГО обновления при выпуске сборки, поэтому на данный момент мы можем установить флаг с помощью удаленной конфигурации и определить, является ли обновление ГИБКОМ или НЕМЕДЛЕННЫМ, может быть в будущем игровой магазин дать возможность установить флаг для определения типа обновления.

Код:

val jsonObject=JSONObject(FirebaseConfig().getStringConfig(RemoteConfigConstants.KEY_APP_UPGRADE))
updateFlag = jsonObject.getInt(JsonConstants.UPGRADE_TYPE)

private fun checkForInAppUpdate() {
        appUpdateManager = AppUpdateManagerFactory.create(this)
        appUpdateManager.appUpdateInfo.addOnSuccessListener {
            if ((it.updateAvailability() === UpdateAvailability.UPDATE_AVAILABLE)) 
        {
                if (updateFlag == 0 && it.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
                    requestUpdate(it)
                    appUpdateManager.registerListener(this@HomeActivity)
                } else if (it.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
                    requestUpdate(it, AppUpdateType.IMMEDIATE)
                }
            }
        }
    }

Здесь значение updateFlag - это значение, которое мы получаем из удаленной конфигурации для определенного типа обновления.

Я уже поднимал эту проблему в Google Issue Tracker здесь и получил следующий ответ от разработчиков Google:

Разработчик должен выбрать, какой тип обновления запускать. Режим определяется приложением в коде. См. https://developer.android.com/guide/app-bundle/in-app-updates.

Я уже встроил api обновления в приложение в мобильное приложение GoIbibo, и теперь он работает отлично. В документации была эта двусмысленность. Поэтому вы должны написать свою собственную логику, хотите ли вы гибкое или немедленное обновление.

Я столкнулся с appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE) или appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE), возвращающим false, даже если обновление доступно, когда на моем устройстве нет сетевого подключения.

Я столкнулся с одним случаем, когда isUpdateTypeAllowed возвращает false. Это когда на устройстве недостаточно места для обновления приложения. для меня осталось 140 МБ свободного места и 60 МБ для обновления приложения. Когда я освобождаю спецификацию, isUpdateTypeAllowed возвращает true.

Эти методы могут возвращать true, если ваш UpdateAvailability равен UPDATE_AIVALABLE. Пожалуйста, сначала убедитесь, что это правда:

appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE

Другие вопросы по тегам