React-native-iap: Membeli produk `android.test.canceled` akan membuat aplikasi mogok

Dibuat pada 28 Jan 2019  ·  5Komentar  ·  Sumber: dooboolab/react-native-iap

Versi react-native-IAP

2.4.0-beta8

Versi react-native

0.55.4

Platform yang Anda hadapi kesalahan (IOS atau Android atau keduanya?)

Android

Perilaku yang diharapkan

Janji pembelian ditolak dengan E_USER_CANCELLED, "Cancelled."

Perilaku sebenarnya

Aplikasi mogok:

01-28 11:21:58.177 2773-2919/ D/RNIapModule: buyItemByType (type: inapp, sku: android.test.canceled, oldSku: null, prorationMode: 0) responseCode: 0(OK)
01-28 11:22:03.509 2773-2919/ D/RNIapModule: Purchase Updated Listener
01-28 11:22:03.509 2773-2919/ D/RNIapModule: responseCode: 0

                                                                       --------- beginning of crash
01-28 11:22:03.510 2773-2919/ E/AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
                                                                          Process: , PID: 2773
                                                                          java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
                                                                              at com.dooboolab.RNIap.RNIapModule$11.onPurchasesUpdated(RNIapModule.java:436)
                                                                              at com.android.billingclient.api.BillingClientImpl$1.onReceiveResult(BillingClientImpl.java:151)
                                                                              at android.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:50)
                                                                              at android.os.Handler.handleCallback(Handler.java:789)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:98)
                                                                              at android.os.Looper.loop(Looper.java:164)
                                                                              at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:192)
                                                                              at java.lang.Thread.run(Thread.java:764)

Lingkungan yang diuji (Emulator? Perangkat Nyata?)

Perangkat nyata

Langkah-langkah untuk mereproduksi perilaku

  • Beli produk pengujian statis Android android.test.canceled
  • Ketika onPurchasesUpdated dipanggil, NPE dilemparkan pada baris 436 Purchase purchase = purchases.get(0); karena purchases adalah @Nullable dan  null sementara responseCode adalah 0.
🐛 bug 🚶🏻 stale 🤖 android

Komentar yang paling membantu

@Jmartel Ya. Saya selalu ingin menerapkan beberapa modul pengujian tetapi saat ini, saya selalu kehabisan waktu 😿. Kami harus memeriksa sendiri runtime sebelum merilis ..

Semua 5 komentar

Terima kasih atas masalah solusinya. @johnmartel Saya harap Anda memberi kami PR jika Anda sudah tahu bagaimana memecahkan masalah.

@hyochan Saya sedang menangani masalah ini sekarang, saya akan mengirimkan PR secepat mungkin. Masalahnya adalah lib sangat kurang tes dan sulit untuk memastikan saya tidak melanggar apa pun.

@Jmartel Ya. Saya selalu ingin menerapkan beberapa modul pengujian tetapi saat ini, saya selalu kehabisan waktu 😿. Kami harus memeriksa sendiri runtime sebelum merilis ..

Bagaimana kalau hanya memeriksa apakah purchases adalah null seperti itu?

  PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {
    <strong i="8">@Override</strong>
    public void onPurchasesUpdated(int responseCode, <strong i="9">@Nullable</strong> List<Purchase> purchases) {
      Log.d(TAG, "Purchase Updated Listener");
      Log.d(TAG, "responseCode: " + responseCode);

      if (responseCode != BillingClient.BillingResponse.OK) {
        rejectPromisesWithBillingError(PROMISE_BUY_ITEM, responseCode);
        return;
      }

+      if (purchases == null) {
+        rejectPromisesWithBillingError(PROMISE_BUY_ITEM , responseCode);
+       return;
+      }

      Purchase purchase = purchases.get(0);

     // ...

Halo, sepertinya tidak ada aktivitas terkait masalah ini akhir-akhir ini. Apakah masalah sudah diperbaiki atau masih membutuhkan perhatian masyarakat? Masalah ini mungkin ditutup jika tidak ada aktivitas lebih lanjut yang terjadi. Anda juga dapat memberi label masalah ini sebagai "Untuk Diskusi" atau "Edisi pertama yang baik" dan saya akan membiarkannya terbuka. Terima kasih atas kontribusi Anda.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat