L'aggiornamento in-app fornisce InstallException (ERROR_API_NOT_AVAILABLE)


12

Implementata la funzione di aggiornamento in-app, usando il seguente frammento di codice:

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

Sto testando l'aggiornamento in-app sul dispositivo con Android 9. Tuttavia, mi sta dando un errore (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)

Sta dicendo che controlla il seguente link: https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_API_NOT_AVAILABLE )

Utilizzo della versione della libreria principale Play: 1.6.5

Ultima versione della libreria principale:

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

Tuttavia, non sono in grado di capire perché stia dicendo che ERROR_API_NOT_AVAILABLE. Qualsiasi aiuto sarebbe apprezzato!


hai qualche risposta?
Ankur_009

Non ancora, ma puoi utilizzare questa condivisione di app interna per testare l'aggiornamento InApp: support.google.com/googleplay/android-developer/answer/…
Umang Kothari

hai qualche risposta?
MoDev

Hai una risposta valida per questo?
Dhaval Kansara,

Hai qualche risposta, come risolverlo? Ricevo lo stesso errore.
Ashish Agrawal,

Risposte:


5

Innanzitutto , controlla di utilizzare l'ultima versione della libreria di giochi.

In secondo luogo , fatto discreto: controlla che l'app che stai testando abbia lo stesso nome di pacchetto disponibile sul Play Store.

Esempio:

Hai un'app sul Play Store con il nome del pacchetto com.example.appma stai testando l'app con il nome del pacchetto com.example.app.debug. Verrà visualizzato questo errore: ERROR_API_NOT_AVAILABLE

Nota: è necessario disporre di almeno una versione dell'app nel Play Store durante il test.


1. Utilizzando l'ultima versione della libreria di giochi 2. I nomi dei pacchetti sono gli stessi Still, di fronte a questo problema :(
Umang Kothari,

Funziona bene per la build di rilascio, ma viene eseguito una volta sulla versione di debug solo se si cancella la cache e l'archiviazione del Play Store. Per eseguirlo di nuovo, è necessario cancellare nuovamente la cache e l'archiviazione di Play Store.
Abdul Mateen,

1
oh, questo ha funzionato davvero per me. Ho cancellato la cache e archiviato i dati del Play Store. Grazie @AbdulMateen
gmartinsnull

Penso che il problema sia legato anche al certificato caricato per giocare alla console. La versione di debug ha un certificato diverso e non corrisponde a quello di "produzione". Quindi è impossibile testare l'API anche con FakeUpdateManager
Nicola Gallazzi il

2

La mia app funzionava bene prima di oggi, ma ho iniziato a ricevere questo errore oggi. Una soluzione temporanea consiste nello svuotare la cache e l'archiviazione del Google Play Store e quindi provare ad avviare l'app. Per me, funziona solo la prima volta, ma dopo fallisce. Prima di riavviare l'app, devo svuotare nuovamente la cache e l'archiviazione. Penso che ci sia qualcosa di sbagliato sul lato di Google Play Store a causa del quale questo problema si sta verificando perché tutto andava bene per me prima di oggi.


2

Oltre a quanto suggerito da Vipal, il problema potrebbe essere dovuto a una mancata corrispondenza della firma tra la versione installata sul dispositivo e quella fornita da Play Store (questo è un problema comune se si tenta di testarlo con build di debug). Vedi https://developer.android.com/guide/playcore/in-app-updates#troubleshoot

Recentemente l'API Play Core ha iniziato a restituire un API_NOT_AVAILABLEerrore se l'app non è di proprietà dell'utente o la mancata corrispondenza delle firme, mentre prima era utilizzata per restituire un'attività riuscita UPDATE_NOT_AVAILABLE.

La raccomandazione è:

Fonte: lavoro nel team di Play Core


L'uso della condivisione interna delle app mi ha aiutato molto. Posso consigliarlo. Un po 'ingombrante, ma assicura che nessuno di quei messaggi di errore "Non abbia senso" compaia.
MartinJH,

0

La soluzione temporanea per il momento è di circondare il OnCompleteListenercon un:

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

Solo per evitare di dover cancellare la cache del PlayStore ogni volta che riavvio l'app


1
Forse potresti farlo in addOnFailureListener ? Perché questo è chiamato su un errore. Ho il processo InAppUpdate in BaseActivity e utilizzo un'interfaccia per restituire il risultato a qualsiasi attività che ne abbia bisogno.
Sceada il

0

Dopo un lungo periodo di debug. Ho scoperto che ciò è dovuto al fatto che stiamo testando l'app direttamente sul cellulare. Anche se generiamo e utilizziamo l'apk firmato, si verificherà questo errore. L'unico modo per eliminare questo errore è che dobbiamo scaricare l'app da Google Play.

Possiamo usare la condivisione interna dell'app per testare o semplicemente pubblicare la nostra app.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.