In-App-Update gibt InstallException (ERROR_API_NOT_AVAILABLE)

12

Implementierte In-App-Update-Funktion unter Verwendung des folgenden Code-Snippets:

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();
    });
}

Ich teste das In-App-Update auf dem Gerät mit Android 9. Trotzdem wird mir ein Fehler angezeigt (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)

Überprüfen Sie den folgenden Link: https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_API_NOT_AVAILABLE )

Verwenden der Play Core Library-Version: 1.6.5

Neueste Version der Kernbibliothek:

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

Ich kann jedoch nicht verstehen, warum ERROR_API_NOT_AVAILABLE steht. Jede Hilfe wäre dankbar!

Umang Kothari
quelle
Hast du eine Antwort?
Ankur_009
Noch nicht, aber Sie können diese interne App-Freigabe verwenden, um InApp Update zu testen: support.google.com/googleplay/android-developer/answer/…
Umang Kothari
Hast du eine Antwort?
6.
Hast du eine gültige Antwort darauf?
Dhaval Kansara
Haben Sie eine Antwort, wie Sie dieses Problem beheben können? Ich erhalte den gleichen Fehler.
Ashish Agrawal

Antworten:

5

Überprüfen Sie zunächst , ob Sie die neueste Version der Wiedergabebibliothek verwenden.

Zweitens eine untertriebene Tatsache: Bitte überprüfen Sie, ob die App, die Sie testen, denselben Paketnamen hat, der im Play Store verfügbar ist.

Beispiel:

Sie haben eine App im Play Store mit dem Paketnamen, com.example.appaber Sie testen Ihre App mit dem Paketnamen com.example.app.debug. Sie erhalten folgende Fehlermeldung: ERROR_API_NOT_AVAILABLE

Hinweis: Sie müssen beim Testen mindestens eine Version Ihrer App im Play Store haben.

Vipul Asri
quelle
1. Verwenden der neuesten Version der Spielbibliothek 2. Die Paketnamen sind immer noch dieselben, mit diesem Problem konfrontiert :(
Umang Kothari
Es funktioniert gut für den Release-Build, wird jedoch nur einmal in der Debug-Version ausgeführt, wenn Sie den Play Store-Cache und -Speicher leeren. Um es erneut auszuführen, müssen Sie den Cache und den Speicher des Play Store erneut leeren.
Abdul Mateen
1
Oh, das hat tatsächlich bei mir funktioniert. Ich habe den Cache geleert und Daten des Play Store gespeichert. Vielen Dank, dass Sie @AbdulMateen
gmartinsnull
Ich denke, dass das Problem auch mit dem Zertifikat zusammenhängt, das auf die Spielekonsole hochgeladen wurde. Die Debug-Version hat ein anderes Zertifikat und stimmt nicht mit dem "Produktions" -Zertifikat überein. Es ist also unmöglich, die API auch mit FakeUpdateManager
Nicola Gallazzi
2

Meine App hat vor heute einwandfrei funktioniert, aber ich habe heute angefangen, diesen Fehler zu bekommen. Eine vorübergehende Problemumgehung besteht darin, den Cache und den Speicher Ihres Google Play Store zu leeren und anschließend die App zu starten. Bei mir funktioniert es nur beim ersten Mal, scheitert aber danach. Bevor ich die App erneut starte, muss ich den Cache und den Speicher erneut leeren. Ich denke, auf der Google Play Store-Seite stimmt etwas nicht, weshalb dieses Problem auftritt, da mir bis heute alles in Ordnung war.

Abdul Mateen
quelle
2

Zusätzlich zu den Vorschlägen von Vipal kann das Problem auf eine Signaturinkongruenz zwischen der auf dem Gerät installierten Version und der vom Play Store bereitgestellten Version zurückzuführen sein (dies ist ein häufiges Problem, wenn Sie versuchen, es mit Debug-Builds zu testen). Siehe https://developer.android.com/guide/playcore/in-app-updates#troubleshoot

Vor kurzem hat die Play Core-API einen API_NOT_AVAILABLEFehler zurückgegeben, wenn die App nicht dem Benutzer gehört oder die Signaturen nicht übereinstimmen, bevor zuvor eine erfolgreiche UPDATE_NOT_AVAILABLEAufgabe zurückgegeben wurde.

Die Empfehlung lautet:

  • Wenn Sie die Kotlin-Erweiterung verwenden, stellen Sie sicher, dass Sie die von ausgelöste Ausnahme abfangen requestAppUpdateInfo
  • Wenn Sie PlayCore Java verwenden, stellen Sie sicher, dass Sie eine haben onFailureListener, die Fehler von behandeltgetAppUpdateInfo
  • Um einen Debug-Build zu testen, können Sie die interne App-Freigabe verwenden, wie hier erläutert: https://developer.android.com/guide/playcore/in-app-updates#internal-app-sharing

Quelle: Ich arbeite im Play Core-Team

Alessandro Dovis
quelle
Die Verwendung der internen App-Freigabe hat mir sehr geholfen. Ich kann es empfehlen. Etwas umständlich, stellt jedoch sicher, dass keine der Fehlermeldungen "Ich mache keinen Sinn" angezeigt wird.
MartinJH
0

Temporäre Problemumgehung für den Moment besteht darin, das OnCompleteListenermit einem zu umgeben :

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

Nur um zu vermeiden, dass der PlayStore-Cache bei jedem Neustart der App geleert werden muss

Nicolas Ducom
quelle
1
Vielleicht könnten Sie dies in addOnFailureListener tun ? Weil dies bei einem Fehler aufgerufen wird. Ich habe den InAppUpdate-Prozess in einer BaseActivity und verwende eine Schnittstelle, um das Ergebnis an alle Aktivitäten zurückzugeben, die es benötigen.
Sceada
0

Nach langer Zeit des Debuggens. Ich fand, das liegt daran, dass wir die App direkt auf dem Handy testen. Obwohl wir signierte apk generieren und verwenden, tritt dieser Fehler auf. Die einzige Möglichkeit, diesen Fehler zu beheben, besteht darin, die App von Google Play herunterzuladen.

Wir können die interne App-Freigabe verwenden , um unsere App zu testen oder einfach zu veröffentlichen.

Vimal
quelle