Обновление в приложении дает InstallException (ERROR_API_NOT_AVAILABLE)

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

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)

Использование основной библиотеки Play версии: 1.6.5

Последняя версия основной библиотеки:

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

Однако я не могу понять, почему он говорит, что ERROR_API_NOT_AVAILABLE. Любая помощь будет оценена по достоинству!

6 ответов

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

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

Пример:

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

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

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

Недавно 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

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

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

Получил ту же ошибку, попробовал все решения, описанные здесь, ничего не работает. Приложение было установлено из внутренней тестовой дорожки Play Store с кодом версии 267, а затем было отправлено новое обновление для той же дорожки с кодом версии 268.

Play Маркет показывает доступные обновления, но приложение по-прежнему сообщает ERROR_API_NOT_AVAILABLE

Очистить данные Play Store и кеш не помогает.

В описании ERROR_API_NOT_AVAILABLE говорится, что это означает, что "API недоступен на устройстве"

Внимательно прочитав эту страницу еще раз, я заметил, что "внутриигровые обновления поддерживают приложения, работающие только на мобильных устройствах и планшетах Android, а также на устройствах с Chrome OS".

Android TV не упоминается, думаю, причина в моем случае.

Что ж, в моем случае мы очистили кеш приложения Google Play и не запускали Google Play до нашего приложения. Это необходимо для загрузки свежих данных из магазина, которые необходимы для SDK.

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

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

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

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

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

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