Обновление в приложении дает 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.
Мы можем использовать внутренний общий доступ к приложению для тестирования или просто опубликовать наше приложение.