Оновлення в додатку дає InstallException (ERROR_API_NOT_AVAILABLE)


12

Реалізовано функцію оновлення додатків із використанням наступного фрагмента коду:

private void showInAppUpdateDialog(boolean isMandatoryUpdate) {
    Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();

    appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                || appUpdateInfo.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {

            int appUpdateType = isMandatoryUpdate ? IMMEDIATE : AppUpdateType.FLEXIBLE;
            int requestCode = isMandatoryUpdate ? REQUEST_APP_UPDATE_IMMEDIATE : REQUEST_APP_UPDATE_FLEXIBLE;

            if (appUpdateInfo.isUpdateTypeAllowed(appUpdateType)) {
                // start the app update
                try {
                    appUpdateManager.startUpdateFlowForResult(appUpdateInfo, appUpdateType, targetActivity, requestCode);
                } catch (IntentSender.SendIntentException e) {
                    e.printStackTrace();
                }
            }
        }
    }).addOnFailureListener(e -> {
        e.printStackTrace();
    });
}

Я тестую оновлення додатків на пристрої, на якому встановлено Android 9. Тим не менш, це дає мені помилку (ERROR_API_NOT_AVAILABLE):

com.google.android.play.core.install.InstallException: Install Error(-3): The API is not available on this device. (https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_API_NOT_AVAILABLE)
        at com.google.android.play.core.appupdate.i.a(Unknown Source:24)
        at com.google.android.play.core.internal.o.a(Unknown Source:13)
        at com.google.android.play.core.internal.j.onTransact(Unknown Source:22)
        at android.os.Binder.execTransact(Binder.java:731)

Це означає, що перевірте наступне посилання: https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_API_NOT_AVAILABLE )

Використання версії основної бібліотеки Play: 1.6.5

Остання версія основної бібліотеки:

implementation 'com.google.android.play:core:1.7.0'

Однак я не в змозі зрозуміти, чому це говорить, що ERROR_API_NOT_AVAILABLE. Будь-яка допомога буде вдячна!


отримали якусь відповідь?
Ankur_009

Ще немає, але ви можете використовувати цей внутрішній додаток для тестування InApp Update: support.google.com/googleplay/android-developer/answer/…
Уманг Котарі

отримали якусь відповідь?
пн

Отримали якусь вагому відповідь на це?
Дхаваль Кансара

Отримаєте будь-яку відповідь, як це вирішити? Я отримую таку ж помилку.
Ashish Agrawal

Відповіді:


5

По-перше , переконайтеся, що ви використовуєте останню версію бібліотеки відтворення.

По-друге , занижений факт. Перевірте, чи додаток, який ви тестуєте, має те саме ім'я пакета, яке є в магазині ігор.

Приклад:

У вас є додаток у ігровому магазині з назвою пакета, com.example.appале ви протестуєте додаток з назвою пакета com.example.app.debug. Ви отримаєте цю помилку: ERROR_API_NOT_AVAILABLE

Примітка. Під час тестування вам потрібно мати принаймні одну версію свого додатка в магазині ігор.


1. Використання останньої версії ігрової бібліотеки 2. Імена пакунків такі ж, як і раніше, стикаються з цим питанням :(
Umang Kothari

Він відмінно працює для версії версії, але запускається один раз у версії налагодження, лише якщо ви очистите кеш і сховище Play Store. Щоб запустити його ще раз, потрібно знову очистити кеш-пам'ять і сховище Play Store.
Абдул Матін

1
о, це насправді працювало для мене. Я очистив кеш-пам'ять і збережу дані Play Store. Дякую @AbdulMateen
gmartinsnull

Я думаю, що проблема також пов’язана з сертифікатом, завантаженим на ігрову консоль. Версія для налагодження має інший сертифікат, і вона не відповідає «виробничій». Тому неможливо перевірити api навіть за допомогою FakeUpdateManager
Nicola Gallazzi

2

Мій додаток працював чудово раніше, але сьогодні я почав отримувати цю помилку. Одне тимчасове рішення - очистити кеш-пам’ять і сховище Google Play Store, а потім спробувати запустити додаток. Для мене це працює лише в перший раз, але згодом виходить з ладу. Перш ніж знову запустити додаток, мені доведеться ще раз очистити кеш і сховище. Я думаю, що в магазині Google Play Store щось не так, через що ця проблема відбувається, тому що для мене все було нормально раніше.


2

Крім того, що запропонував Vipal, проблема може бути пов’язана з невідповідністю підпису між версією, яку ви встановили на пристрої, та версією, яку постачає Play Store (це поширена проблема, якщо ви спробуєте перевірити її з налагодженнями). Дивіться https://developer.android.com/guide/playcore/in-app-updates#troubleshoot

Нещодавно API Core Core почав повертати API_NOT_AVAILABLEпомилку, якщо додаток не належить користувачеві або невідповідність підписів, до цього він використовувався для повернення успішного UPDATE_NOT_AVAILABLEзавдання.

Рекомендація:

  • якщо ви використовуєте розширення Kotlin, переконайтеся, що ви ловите виняток, кинутий на нього requestAppUpdateInfo
  • якщо ви використовуєте PlayCore Java, переконайтеся, що у вас є помилка, з якої виправляються onFailureListenerпомилкиgetAppUpdateInfo
  • щоб перевірити збірку налагодження, ви можете скористатись внутрішнім спільним доступом додатків, як пояснено тут: https://developer.android.com/guide/playcore/in-app-updates#internal-app-sharing

Джерело: Я працюю над командою Play Core


Використання внутрішнього обміну додатками мені дуже допомогло. Я можу рекомендувати це. Трохи громіздкий, але гарантує, що жодне з тих повідомлень про помилки "я не маю сенсу" не з’являється.
MartinJH

0

Тимчасовим рішенням на даний момент є оточення OnCompleteListener:

try {...} catch(e: RuntimeExecutionException) {...}

Просто, щоб не очищати кеш PlayStore кожного разу, коли я перезапускаю програму


1
Можливо, ви могли це зробити в addOnFailureListener ? Тому що це викликається помилкою. У мене є процес InAppUpdate в BaseActivity і використовую інтерфейс, щоб повернути результат будь-якій діяльності, якій це потрібно.
Сцеада

0

Після тривалого часу налагодження. Я виявив, що це тому, що ми тестуємо додаток безпосередньо на мобільному пристрої. Незважаючи на те, що ми генеруємо та використовуємо підписані apk, ця помилка станеться. Єдиний спосіб позбутися цієї помилки - нам потрібно завантажити додаток з google play.

Ми можемо використовувати внутрішній додаток для тестування або просто опублікувати наш додаток.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.