Обновление в приложении дает исключение InstallException (ERROR_API_NOT_AVAILABLE) - PullRequest
12 голосов
/ 17 марта 2020

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

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. Любая помощь будет оценена!

Ответы [ 5 ]

5 голосов
/ 17 марта 2020

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

Во-вторых , заниженный факт: пожалуйста, проверьте приложение, которое вы тестируете то же самое имя пакета, которое доступно в магазине игры.

Пример:

В магазине Play есть приложение с именем пакета com.example.app, но вы тестируете приложение с именем пакета com.example.app.debug. Вы получите эту ошибку: ERROR_API_NOT_AVAILABLE

Примечание: При тестировании вам нужно иметь хотя бы одну версию вашего приложения в игровом магазине.

2 голосов
/ 17 апреля 2020

Вдобавок к тому, что предложил Vipal, проблема может быть связана с несоответствием подписи между версией, которую вы установили на устройстве, и той, которую поставляет Play Store (это распространенная проблема, если вы пытаетесь протестировать ее с помощью отладки). строит). См. https://developer.android.com/guide/playcore/in-app-updates#troubleshoot

Недавно API-интерфейс Play Core начал возвращать ошибку API_NOT_AVAILABLE, если приложение не принадлежит пользователю или несоответствие подписей, хотя до этого оно использовалось для возврата успешного UPDATE_NOT_AVAILABLE Задача.

Рекомендуется:

  • , если вы используете расширение Kotlin, убедитесь, что вы перехватываете исключение, выданное requestAppUpdateInfo
  • если вы используете PlayCore Java, убедитесь, что у вас есть onFailureListener, который обрабатывает сбои из getAppUpdateInfo
  • , чтобы протестировать отладочную сборку, вы можете использовать Internal App Sharing, как описано здесь: https://developer.android.com/guide/playcore/in-app-updates#internal -app-share

Источник: я работаю в команде Play Core

2 голосов
/ 17 марта 2020

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

0 голосов
/ 26 апреля 2020

После долгого времени отладки. Я обнаружил, что это из-за того, что мы тестируем приложение прямо в мобильном телефоне. Даже если мы создаем и используем подписанный apk, эта ошибка произойдет. Единственный способ избавиться от этой ошибки - нам нужно загрузить приложение из Google Play.

Мы можем использовать Внутренний общий доступ к приложению для тестирования или просто опубликовать sh наше приложение.

0 голосов
/ 17 марта 2020

Временное решение проблемы на данный момент - окружить OnCompleteListener с помощью:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...