Zaimplementowano funkcję aktualizacji w aplikacji za pomocą następującego fragmentu kodu:
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();
});
}
Testuję aktualizację w aplikacji na urządzeniu z Androidem 9. Nadal wyświetla mi się komunikat o błędzie (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)
Mówi, że sprawdź następujący link: https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_API_NOT_AVAILABLE )
Korzystanie z podstawowej wersji biblioteki Play: 1.6.5
Najnowsza wersja biblioteki podstawowej:
implementation 'com.google.android.play:core:1.7.0'
Jednak nie jestem w stanie zrozumieć, dlaczego mówi, że ERROR_API_NOT_AVAILABLE. Każda pomoc będzie mile widziana!
android
in-app-update
google-play-core
Umang Kothari
źródło
źródło
Odpowiedzi:
Po pierwsze , sprawdź, czy korzystasz z najnowszej wersji biblioteki odtwarzania.
Po drugie , zaniżony fakt: sprawdź, czy testowana aplikacja ma taką samą nazwę pakietu, która jest dostępna w sklepie Play.
Przykład:
Masz aplikację w sklepie Play z nazwą pakietu,
com.example.app
ale testujesz ją z nazwą pakietucom.example.app.debug
. Otrzymasz ten błąd: ERROR_API_NOT_AVAILABLEUwaga: podczas testowania musisz mieć co najmniej jedną wersję aplikacji w sklepie Play.
źródło
Moja aplikacja działała dobrze przed dniem dzisiejszym, ale dzisiaj zaczęłam otrzymywać ten błąd. Jednym tymczasowym obejściem jest wyczyszczenie pamięci podręcznej i pamięci Google Play Store, a następnie próba uruchomienia aplikacji. Dla mnie to działa tylko za pierwszym razem, ale potem kończy się niepowodzeniem. Przed ponownym uruchomieniem aplikacji muszę ponownie wyczyścić pamięć podręczną i pamięć. Wydaje mi się, że po stronie sklepu Google Play dzieje się coś złego, przez co ten problem się dzieje, ponieważ przedtem wszystko było dla mnie w porządku.
źródło
Oprócz tego, co sugerował Vipal, problem może wynikać z niedopasowania sygnatur między wersją zainstalowaną na urządzeniu a wersją, którą dostarczyłby Sklep Play (jest to powszechny problem, gdy próbujesz przetestować kompilacje debugowania). Zobacz https://developer.android.com/guide/playcore/in-app-updates#troubleshoot
Niedawno Play Core API zaczął zwracać
API_NOT_AVAILABLE
błąd, jeśli aplikacja nie jest własnością użytkownika lub niezgodność podpisów, zanim jeszcze zwróciła udaneUPDATE_NOT_AVAILABLE
zadanie.Zalecane jest:
requestAppUpdateInfo
onFailureListener
obsługujący awariegetAppUpdateInfo
Źródło: Pracuję w zespole Play Core
źródło
Tymczasowe obejście tego problemu polega na
OnCompleteListener
:try {...} catch(e: RuntimeExecutionException) {...}
Aby uniknąć konieczności czyszczenia pamięci podręcznej PlayStore za każdym razem, gdy ponownie uruchamiam aplikację
źródło
Po długim czasie debugowania. Odkryłem, że dzieje się tak, ponieważ testujemy aplikację bezpośrednio na urządzeniach mobilnych. Mimo że generujemy i używamy podpisanego pliku APK, ten błąd wystąpi. Jedynym sposobem na usunięcie tego błędu jest pobranie aplikacji z Google Play.
Możemy użyć wewnętrznego udostępniania aplikacji do testowania lub po prostu opublikować naszą aplikację.
źródło