アプリ内アップデートで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

まだ、しかし、あなたはInAppアップデートをテストするには、この内部のアプリの共有を使用することができます。support.google.com/googleplay/android-developer/answer/...
Umangコタリ

答えは?
moDev

これに対する有効な答えを得ましたか?
Dhaval Kansara

これを解決するにはどうすればいいですか?同じエラーが発生します。
Ashish Agrawal

回答:


5

まず、Playライブラリの最新バージョンを使用していることを確認してください。

第二に、控えめな事実:テストするアプリが、Playストアで入手できる同じパッケージ名を持っていることを確認してください。

例:

Playストアにパッケージ名のあるcom.example.appアプリがありますが、パッケージ名でアプリをテストしていますcom.example.app.debug。次のエラーが発生します:ERROR_API_NOT_AVAILABLE

注:テスト中は、Playストアにアプリのバージョンを少なくとも1つ用意する必要があります。


1.最新バージョンのplayライブラリを使用する2.パッケージ名は同じであるが、この問題に直面している:(
Umang Kothari

リリースビルドでは問題なく機能しますが、デバッグバージョンで一度実行されるのは、Playストアのキャッシュとストレージをクリアした場合のみです。再度実行するには、Playストアのキャッシュとストレージを再度クリアする必要があります。
Abdul Mateen

1
ああ、これは実際に私のために働いた。Playストアのキャッシュとストアデータをクリアしました。ありがとう@AbdulMateen
gmartinsnull

この問題は、play consoleにアップロードされた証明書にも関連していると思います。デバッグバージョンには別の証明書があり、「製品版」の証明書と一致しません。したがって、FakeUpdateManagerを使用してもAPIをテストすることは不可能です
Nicola Gallazzi

2

私のアプリは本日以前は問題なく動作していましたが、本日このエラーが発生し始めました。一時的な回避策の1つは、Google Playストアのキャッシュとストレージをクリアしてから、アプリを起動してみることです。私にとって、それは最初にのみ機能しますが、その後失敗します。アプリを再度起動する前に、キャッシュとストレージを再度クリアする必要があります。Google Playストア側に何か問題があると思います。この問題が発生しているのは、今日以前はすべて問題なかったからです。


2

Vipalが提案したことに加えて、この問題は、デバイスにインストールしたバージョンとPlayストアが配信するバージョンの間の署名の不一致が原因である可能性があります(これは、デバッグビルドでテストしようとする場合の一般的な問題です)。https://developer.android.com/guide/playcore/in-app-updates#troubleshootご覧ください

最近、Play Core APIはAPI_NOT_AVAILABLE、アプリがユーザーによって所有されていない場合、またはシグネチャが一致しない場合、以前は成功したUPDATE_NOT_AVAILABLEタスクを返すために使用されていましたが、エラーを返し始めました。

推奨事項は次のとおりです。

  • Kotlin拡張機能を使用する場合は、スローされる例外をキャッチしていることを確認してください requestAppUpdateInfo
  • PlayCore Javaを使用する場合は、onFailureListenerからの失敗を処理するgetAppUpdateInfo
  • デバッグビルドをテストするには、https//developer.android.com/guide/playcore/in-app-updates#internal-app-sharingで説明されているように、内部アプリ共有を使用できます

出典:Play Coreチームで作業しています


内部アプリ共有を使用することは、私に大いに役立ちました。オススメできます。少し面倒ですが、「意味がありません」というエラーメッセージがポップアップ表示されることはありません。
MartinJH

0

当面の一時的な回避策は、をで囲むことOnCompleteListenerです。

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

アプリを再起動するたびにPlayStoreキャ​​ッシュをクリアする必要がないようにするため


1
たぶん、これをaddOnFailureListenerで行うことができますか?これはエラー時に呼び出されるためです。BaseActivityにInAppUpdateプロセスがあり、インターフェイスを使用して、それを必要とするアクティビティに結果を返します。
Sceada

0

長いデバッグの後。これは、モバイルで直接アプリをテストしているためです。署名付きapkを生成して使用している場合でも、このエラーが発生します。このエラーを取り除く唯一の方法は、Google Playからアプリをダウンロードする必要があることです。

内部アプリ共有を使用して、アプリをテストまたは公開することができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.