应用内更新提供InstallException(ERROR_API_NOT_AVAILABLE)


12

使用以下代码段实现了应用内更新功能:

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#ERROR_API_NOT_AVAILABLE

使用Play核心库版本:1.6.5

最新的核心库版本:

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

但是,我不明白为什么要说ERROR_API_NOT_AVAILABLE。任何帮助,将不胜感激!


有任何答案吗?
Ankur_009

:还没有,但是,你可以使用这个内部应用程序共享来测试应用程式内更新support.google.com/googleplay/android-developer/answer/...
Umang科塔里

有任何答案吗?
moDev

有任何有效的答案吗?
Dhaval Kansara

有任何答案,如何解决?我收到同样的错误。
Ashish Agrawal

Answers:


5

首先,请检查您是否使用了最新版本的播放库。

其次,低调的事实:请检查您正在测试的应用具有与Play商店相同的软件包名称。

例:

您在Play商店中有一个带有程序包名称com.example.app的应用程序,但您正在测试具有程序包名称的应用程序com.example.app.debug。您将收到此错误:ERROR_API_NOT_AVAILABLE

注意:进行测试时,您必须在Play商店上拥有至少一个版本的应用程序。


1.使用最新版本的播放库2.包名称相同仍然面临此问题:(
Umang Kothari

它适用于Release版本,但只有在清除Play商店的缓存和存储后,才能在Debug版本上运行一次。要再次运行它,您必须再次清除Play商店的缓存和存储。
Abdul Mateen

1
哦,这实际上对我有用。我清除了Play商店的缓存并存储了数据。谢谢@AbdulMateen
gmartinsnull

我认为该问题还与上传到游戏机的证书有关。调试版本具有不同的证书,并且与“生产”证书不匹配。因此,即使使用FakeUpdateManager,也无法测试api
Nicola Gallazzi

2

我的应用程序在今天之前运行良好,但今天开始出现此错误。一种临时的解决方法是清除您的Google Play商店缓存和存储,然后尝试启动该应用。对我来说,它只能在第一次使用,但之后会失败。在再次启动该应用程序之前,我必须再次清除缓存和存储。我认为Google Play商店方面存在问题,由于这个问题在今天之前对我来说还不错,因此正在发生此问题。


2

除了Vipal提出的建议外,问题可能是由于您在设备上安装的版本与Play Store会提供的版本之间的签名不匹配(如果尝试使用调试版本进行测试,这是一个常见问题)。请参阅https://developer.android.com/guide/playcore/in-app-updates#troubleshoot

最近,API_NOT_AVAILABLE如果该应用不是用户所有或签名不匹配,则Play Core API开始返回错误,而该应用以前曾返回成功的UPDATE_NOT_AVAILABLETask。

建议是:

资料来源:我在Play Core团队工作


使用内部应用程序共享对我有很大帮助。我可以推荐。有点麻烦,但是可以确保不会弹出“我没有意义”的错误消息。
MartinJH

0

目前,暂时的解决方法是将括OnCompleteListener起来:

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

只是为了避免每次我重新启动应用程序时都必须清除PlayStore缓存


1
也许您可以在addOnFailureListener中执行此操作?因为这是在错误时调用的。我在BaseActivity中具有InAppUpdate流程,并使用一个接口将结果返回给需要它的任何Activity。
塞达

0

经过长时间的调试。我发现,这是因为我们正在直接在移动设备中测试该应用程序。即使我们生成并使用签名的apk,也会发生此错误。摆脱这个错误的唯一方法是,我们需要从Google Play下载该应用。

我们可以使用内部应用共享来测试或简单地发布我们的应用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.