Pembaruan Dalam Aplikasi memberi InstallException (ERROR_API_NOT_AVAILABLE)

12

Diimplementasikan fitur pembaruan dalam aplikasi, menggunakan potongan kode berikut:

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

Saya menguji pembaruan dalam aplikasi pada perangkat yang memiliki Android 9. Tetap saja, ini memberi saya kesalahan (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)

Dikatakan bahwa periksa tautan berikut: https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_API_NOT_AVAILABLE )

Menggunakan Play core library versi: 1.6.5

Versi core library terbaru:

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

Namun, saya tidak bisa mengerti mengapa dikatakan bahwa ERROR_API_NOT_AVAILABLE. Bantuan apa pun akan dihargai!

Umang Kothari
sumber
punya jawaban?
Ankur_009
Belum, tetapi, Anda dapat menggunakan berbagi aplikasi internal ini untuk menguji Pembaruan InApp: support.google.com/googleplay/android-developer/answer/…
Umang Kothari
punya jawaban?
moDev
Punya jawaban yang valid untuk ini?
Dhaval Kansara
Mendapat jawaban, bagaimana mengatasinya? Saya mendapatkan kesalahan yang sama.
Ashish Agrawal

Jawaban:

5

Pertama , harap periksa bahwa Anda menggunakan versi terbaru dari play library.

Kedua , fakta yang dikecilkan: Silakan periksa aplikasi yang Anda uji memiliki nama paket yang sama yang tersedia di play store.

Contoh:

Anda memiliki aplikasi di play store dengan nama paket com.example.apptetapi Anda menguji aplikasi Anda dengan nama paket com.example.app.debug. Anda akan mendapatkan kesalahan ini: ERROR_API_NOT_AVAILABLE

Catatan: Anda harus memiliki setidaknya satu versi aplikasi Anda di play store saat Anda menguji.

Vipul Asri
sumber
1. Menggunakan versi terbaru dari perpustakaan bermain 2. Nama Paket masih sama, menghadapi masalah ini :(
Umang Kothari
Ini berfungsi baik untuk rilis Rilis, tetapi berjalan sekali pada versi Debug hanya jika Anda menghapus cache dan penyimpanan Play Store Anda. Untuk menjalankannya lagi, Anda harus menghapus cache dan penyimpanan Play Store lagi.
Abdul Mateen
1
oh ini benar-benar bekerja untuk saya. Saya membersihkan cache dan menyimpan data Play Store. Terima kasih @AbdulMateen
gmartinsnull
Saya pikir masalah ini juga terkait dengan sertifikat yang diunggah ke konsol bermain. Versi debug memiliki sertifikat yang berbeda dan tidak cocok dengan yang "produksi". Jadi tidak mungkin untuk menguji api bahkan dengan FakeUpdateManager
Nicola Gallazzi
2

Aplikasi saya berfungsi dengan baik sebelum hari ini, tetapi saya mulai mendapatkan kesalahan ini hari ini. Salah satu solusi sementara adalah menghapus cache dan penyimpanan Google Play Store Anda dan kemudian mencoba meluncurkan aplikasi. Bagi saya, ini hanya berfungsi pertama kali, tetapi gagal setelahnya. Sebelum meluncurkan aplikasi lagi, saya harus menghapus cache dan penyimpanan lagi. Saya pikir ada sesuatu yang salah di sisi Google Play Store karena masalah ini terjadi karena semuanya baik-baik saja untuk saya sebelum hari ini.

Abdul Mateen
sumber
2

Di atas apa yang disarankan oleh Vipal, masalah ini mungkin disebabkan oleh ketidakcocokan tanda tangan antara versi yang telah Anda instal pada perangkat dan versi yang Play Play akan berikan (ini adalah masalah umum jika Anda mencoba mengujinya dengan build debug). Lihat https://developer.android.com/guide/playcore/in-app-updates#troubleshoot

Baru-baru ini Play Core API mulai mengembalikan API_NOT_AVAILABLEkesalahan jika aplikasi tidak dimiliki oleh pengguna atau ketidakcocokan tanda tangan, sementara sebelum digunakan untuk mengembalikan UPDATE_NOT_AVAILABLETugas yang berhasil .

Rekomendasi tersebut adalah:

  • jika Anda menggunakan Ekstensi Kotlin, pastikan Anda menangkap pengecualian yang dilontarkan requestAppUpdateInfo
  • jika Anda menggunakan PlayCore Java, pastikan Anda memiliki onFailureListeneryang menangani kegagalangetAppUpdateInfo
  • untuk menguji build debug, Anda dapat menggunakan Internal App Sharing, seperti yang dijelaskan di sini: https://developer.android.com/guide/playcore/in-app-updates#internal-app-sharing

Sumber: Saya bekerja di tim Play Core

Alessandro Dovis
sumber
Menggunakan berbagi aplikasi internal banyak membantu saya. Saya bisa merekomendasikannya. Agak merepotkan, tetapi memastikan tidak ada pesan kesalahan "Saya tidak masuk akal" yang muncul.
MartinJH
0

Solusi sementara untuk saat ini adalah mengelilingi OnCompleteListenerdengan:

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

Hanya untuk menghindari keharusan menghapus cache PlayStore setiap kali saya meluncurkan ulang aplikasi

Nicolas Ducom
sumber
1
Mungkin Anda bisa melakukan ini di addOnFailureListener ? Karena ini disebut kesalahan. Saya memiliki proses InAppUpdate di BaseActivity dan menggunakan antarmuka untuk memberikan kembali hasil untuk setiap Aktivitas yang membutuhkannya.
Sceada
0

Setelah lama debugging. Saya menemukan, ini karena kami sedang menguji aplikasi langsung di ponsel. Meskipun kami membuat dan menggunakan apk yang ditandatangani, kesalahan ini akan terjadi. Satu-satunya cara untuk menghilangkan kesalahan ini adalah, kita perlu mengunduh aplikasi dari google play.

Kita dapat menggunakan berbagi aplikasi internal untuk menguji atau hanya menerbitkan aplikasi kita.

Vimal
sumber