A atualização no aplicativo fornece InstallException (ERROR_API_NOT_AVAILABLE)

12

Recurso de atualização no aplicativo implementado, usando o seguinte snippet de código:

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

Estou testando a atualização no aplicativo no dispositivo com o Android 9. Ainda assim, ele está ocorrendo um erro (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)

Está dizendo que verifique o seguinte link: https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_API_NOT_AVAILABLE )

Usando a versão principal da biblioteca do Play: 1.6.5

Versão mais recente da biblioteca principal:

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

No entanto, não consigo entender por que está dizendo isso ERROR_API_NOT_AVAILABLE. Qualquer ajuda seria apreciada!

Umang Kothari
fonte
tem alguma resposta?
Ankur_009 01/04
Ainda não, mas você pode usar esse compartilhamento interno de aplicativos para testar a Atualização do InApp: support.google.com/googleplay/android-developer/answer/…
Umang Kothari
tem alguma resposta?
moDev 6/04
Tem alguma resposta válida para isso?
Dhaval Kansara 15/04
Tem alguma resposta, como resolver isso? Estou recebendo o mesmo erro.
Ashish Agrawal

Respostas:

5

Primeiramente , verifique se você está usando a versão mais recente da biblioteca de jogos.

Segundo , fato discreto: verifique se o aplicativo que você está testando tem o mesmo nome de pacote disponível na loja de jogos.

Exemplo:

Você tem um aplicativo na Play Store com o nome do pacote, com.example.appmas está testando seu aplicativo com o nome do pacote com.example.app.debug. Você receberá este erro: ERROR_API_NOT_AVAILABLE

Nota: Você precisa ter pelo menos uma versão do seu aplicativo na loja de jogos quando estiver testando.

Vipul Asri
fonte
1. Usando a versão mais recente da biblioteca de jogos 2. Os nomes dos pacotes são os mesmos Mesmo assim, enfrentando esse problema :(
Umang Kothari
Funciona bem para a compilação Release, mas é executado apenas na versão Debug se você limpar o cache e o armazenamento da Play Store. Para executá-lo novamente, você precisa limpar o cache e o armazenamento da Play Store novamente.
Abdul Mateen
11
Oh, isso realmente funcionou para mim. Limpei o cache e armazene dados da Play Store. Obrigado @AbdulMateen
gmartinsnull
Eu acho que o problema também está relacionado ao certificado enviado para jogar no console. A versão de depuração tem um certificado diferente e não corresponde ao da "produção". Portanto, é impossível testar a API mesmo com o FakeUpdateManager
Nicola Gallazzi 27/03
2

Meu aplicativo estava funcionando bem antes de hoje, mas comecei a receber esse erro hoje. Uma solução temporária é limpar o cache e o armazenamento da Google Play Store e tentar iniciar o aplicativo. Para mim, funciona apenas na primeira vez, mas falha depois. Antes de iniciar o aplicativo novamente, tenho que limpar o cache e o armazenamento novamente. Acho que há algo errado no lado da Google Play Store, devido a que esse problema está acontecendo porque tudo estava bem para mim antes de hoje.

Abdul Mateen
fonte
2

Além do que Vipal sugeriu, o problema pode ser devido a uma incompatibilidade de assinatura entre a versão que você instalou no dispositivo e a que a Play Store entregaria (esse é um problema comum se você tentar testá-lo com compilações de depuração). Consulte https://developer.android.com/guide/playcore/in-app-updates#troubleshoot

Recentemente, a API do Play Core começou a retornar um API_NOT_AVAILABLEerro se o aplicativo não pertencer ao usuário ou a incompatibilidade de assinaturas, enquanto antes era usado para retornar uma UPDATE_NOT_AVAILABLEtarefa bem-sucedida .

A recomendação é:

  • se você usar a extensão Kotlin, verifique se está capturando a exceção lançada por requestAppUpdateInfo
  • se você usa o PlayCore Java, verifique se possui um onFailureListenerque lide com falhas degetAppUpdateInfo
  • para testar uma compilação de depuração, você pode usar o compartilhamento interno de aplicativos, conforme explicado aqui: https://developer.android.com/guide/playcore/in-app-updates#internal-app-sharing

Fonte: Trabalho na equipe do Play Core

Alessandro Dovis
fonte
Usar o compartilhamento interno de aplicativos me ajudou muito. Eu posso recomendar. Um pouco complicado, mas garante que nenhuma dessas mensagens de erro "Não faço sentido" seja exibida.
MartinJH
0

A solução temporária no momento é cercar o OnCompleteListenercom um:

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

Apenas para evitar ter que limpar o cache do PlayStore toda vez que reinicio o aplicativo

Nicolas Ducom
fonte
11
Talvez você possa fazer isso em addOnFailureListener ? Porque isso é chamado com erro. Eu tenho o processo InAppUpdate em uma BaseActivity e uso uma interface para devolver o resultado a qualquer atividade que precisar.
Sceada 18/03
0

Após muito tempo de depuração. Descobri, isso é porque estamos testando o aplicativo diretamente no celular. Mesmo que geremos e usemos apk assinado, esse erro ocorrerá. A única maneira de se livrar desse erro é: precisamos baixar o aplicativo no google play.

Podemos usar o compartilhamento interno de aplicativos para testar ou simplesmente publicar nosso aplicativo.

Vimal
fonte