17

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

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。任何帮助,将不胜感激!

4

7 回答 7

12

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

其次,轻描淡写的事实:请检查您正在测试的应用程序是否具有相同的包名称,该名称可在 Play 商店中找到。

例子:

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

注意:在进行测试时,您需要在 Play 商店中拥有至少一个应用版本。

于 2020-03-17T13:18:24.810 回答
9

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

最近,如果应用程序不属于用户或签名不匹配,Play Core API 开始返回API_NOT_AVAILABLE错误,而之前它用于返回成功的UPDATE_NOT_AVAILABLE任务。

建议是:

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

于 2020-04-17T11:15:57.333 回答
2

我的应用程序在今天之前运行良好,但我今天开始收到此错误。一种临时解决方法是清除您的 Google Play 商店缓存和存储空间,然后尝试启动该应用程序。对我来说,它只在第一次工作,但后来失败。在再次启动应用程序之前,我必须再次清除缓存和存储。我认为 Google Play 商店方面出了点问题,因此发生了这个问题,因为在今天之前对我来说一切都很好。

于 2020-03-17T09:12:00.540 回答
0

遇到同样的错误,尝试了这里描述的所有解决方案,没有任何效果。应用程序从 Play 商店内部测试轨道安装,版本代码 267,然后将新更新提交到版本代码 268 的同一轨道。

Play 商店显示可用更新,但应用程序仍然显示 ERROR_API_NOT_AVAILABLE

清除 Play 商店数据和缓存无济于事。

ERROR_API_NOT_AVAILABLE 的描述表示“API 在设备上不可用”</p>

再次仔细阅读此页面后,我注意到“应用内更新支持仅在 Android 移动设备和平板电脑以及 Chrome OS 设备上运行的应用”</p>

没有提到Android TV,我认为这就是我的原因。

于 2020-10-19T10:30:52.367 回答
0

好吧,就我而言,我们已经清除了 Google Play 应用程序缓存,并且我们没有在我们的应用程序之前启动 Google Play。您必须这样做才能从商店下载新数据,这是 SDK 所必需的。

于 2020-08-11T08:27:30.190 回答
0

目前的临时解决方法是用 包围OnCompleteListener

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

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

于 2020-03-17T15:57:27.940 回答
0

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

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

于 2020-04-26T15:11:56.683 回答