การอัปเดตในแอปให้ 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 core library version: 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 Kothari

ได้คำตอบใด ๆ
moDev

มีคำตอบที่ถูกต้องสำหรับสิ่งนี้?
Dhaval Kansara

มีคำตอบใด ๆ วิธีแก้ไขปัญหานี้? ฉันได้รับข้อผิดพลาดเดียวกัน
Ashish Agrawal

คำตอบ:


5

ประการแรกโปรดตรวจสอบว่าคุณใช้ไลบรารี่การเล่นเวอร์ชันล่าสุด

ประการที่สองความเป็นจริง understated: โปรดตรวจสอบแอพที่คุณกำลังทดสอบมีชื่อแพคเกจเดียวกันซึ่งมีอยู่ใน play store

ตัวอย่าง:

คุณมี app ที่ร้านค้าในการเล่นที่มีชื่อแพคเกจแต่คุณกำลังทดสอบแอปของคุณที่มีชื่อแพคเกจcom.example.app com.example.app.debugคุณจะได้รับข้อผิดพลาดนี้: ERROR_API_NOT_AVAILABLE

หมายเหตุ:คุณต้องมีแอพอย่างน้อยหนึ่งเวอร์ชันใน play store เมื่อคุณทำการทดสอบ


1. การใช้ไลบรารีการเล่นเวอร์ชันล่าสุด 2. ชื่อแพคเกจยังคงเหมือนเดิมหันหน้าไปทางปัญหานี้ :(
Umang Kothari

มันทำงานได้ดีสำหรับรุ่นวางจำหน่าย แต่จะทำงานเพียงครั้งเดียวในรุ่น Debug เฉพาะเมื่อคุณล้างแคชและที่เก็บข้อมูล Play Store ของคุณ หากต้องการเรียกใช้อีกครั้งคุณจะต้องล้างแคชและที่เก็บข้อมูลของ Play Store อีกครั้ง
Abdul Mateen

1
โอ้มันใช้งานได้จริงสำหรับฉัน ฉันล้างแคชและจัดเก็บข้อมูลของ Play Store ขอบคุณ @AbdulMateen
gmartinsnull

ฉันคิดว่าปัญหานี้เกี่ยวข้องกับใบรับรองที่อัปโหลดไปยังคอนโซลเล่นด้วย รุ่นแก้ปัญหามีใบรับรองที่แตกต่างกันและไม่ตรงกับ "ผลิต" ดังนั้นจึงเป็นไปไม่ได้ที่จะทดสอบ api แม้จะมี FakeUpdateManager
Nicola Gallazzi

2

แอพของฉันทำงานได้ดีก่อนวันนี้ แต่ฉันเริ่มได้รับข้อผิดพลาดในวันนี้ วิธีแก้ปัญหาชั่วคราวหนึ่งวิธีคือการล้างแคชและที่เก็บข้อมูล Google Play Store ของคุณจากนั้นลองเรียกใช้แอป สำหรับฉันมันใช้งานได้เฉพาะในครั้งแรก แต่ล้มเหลวหลังจากนั้น ก่อนจะเปิดแอพอีกครั้งฉันต้องล้างแคชและที่เก็บข้อมูลอีกครั้ง ฉันคิดว่ามีบางอย่างผิดปกติทาง Google Play Store เนื่องจากปัญหานี้เกิดขึ้นเพราะทุกอย่างใช้ได้ดีสำหรับฉันก่อนวันนี้


2

นอกเหนือจากที่ Vipal แนะนำแล้วปัญหาอาจเกิดจากลายเซ็นไม่ตรงกันระหว่างรุ่นที่คุณติดตั้งบนอุปกรณ์และรุ่นที่ Play Store จะส่งมอบ (นี่เป็นปัญหาทั่วไปหากคุณพยายามทดสอบด้วยการสร้าง debug) ดู 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 ? เพราะสิ่งนี้เรียกว่าข้อผิดพลาด ฉันมีกระบวนการ InAppUpdate ใน BaseActivity และใช้อินเทอร์เฟซเพื่อส่งคืนผลลัพธ์ให้กับกิจกรรมใด ๆ ที่ต้องการ
Sceada

0

หลังจากการดีบักเป็นเวลานาน ฉันพบว่าเป็นเพราะเรากำลังทดสอบแอพโดยตรงบนมือถือ แม้ว่าเราจะสร้างและใช้ apk ที่ลงชื่อแล้ว แต่ข้อผิดพลาดนี้จะเกิดขึ้น วิธีเดียวที่จะกำจัดข้อผิดพลาดนี้คือเราต้องดาวน์โหลดแอปจาก google play

เราสามารถใช้การแชร์แอพภายในเพื่อทดสอบหรือเผยแพร่แอพของเรา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.