React-native-iap: Beim Kauf des Produkts "android.test.canceled" stürzt die App ab

Erstellt am 28. Jan. 2019  ·  5Kommentare  ·  Quelle: dooboolab/react-native-iap

Version von react-native-iap

2.4.0-beta8

Version von React-Native

0,55,4

Plattformen, auf denen Sie den Fehler hatten (IOS oder Android oder beides?)

Android

Erwartetes Verhalten

Kaufversprechen wird mit E_USER_CANCELLED, "Cancelled." abgelehnt

Tatsächliches Verhalten

App stürzt ab:

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)

Getestete Umgebung (Emulator? Reales Gerät?)

Echtes Gerät

Schritte zum Reproduzieren des Verhaltens

  • Kaufen Sie das statische Android-Testprodukt android.test.canceled
  • Wenn onPurchasesUpdated aufgerufen wird, wird eine NPE in Zeile 436 Purchase purchase = purchases.get(0); geworfen, weil purchases @Nullable und  null während responseCode ist 0.
🐛 bug 🚶🏻 stale 🤖 android

Hilfreichster Kommentar

@ Johnmartel Ja. Ich möchte immer einige Testmodule implementieren, aber momentan läuft mir immer die Zeit davon 😿. Wir müssen die Laufzeit selbst überprüfen, bevor wir sie veröffentlichen.

Alle 5 Kommentare

Vielen Dank für das Problem mit der Lösung. @johnmartel Ich hoffe, Sie geben uns ein PR wenn Sie bereits wissen, wie Sie das Problem lösen können.

@hyochan Ich arbeite gerade an dem Problem. Ich werde so bald wie möglich eine PR einreichen. Das Problem ist, dass es in der Bibliothek an Tests mangelt und es schwer ist, sicher zu sein, dass ich nichts anderes kaputt mache.

@ Johnmartel Ja. Ich möchte immer einige Testmodule implementieren, aber momentan läuft mir immer die Zeit davon 😿. Wir müssen die Laufzeit selbst überprüfen, bevor wir sie veröffentlichen.

Wie wäre es einfach zu überprüfen, ob die purchases null so sind?

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

     // ...

Hey, es sieht so aus, als ob in letzter Zeit keine Aktivitäten zu diesem Thema stattgefunden haben. Wurde das Problem behoben oder erfordert es immer noch die Aufmerksamkeit der Community? Dieses Problem kann geschlossen werden, wenn keine weitere Aktivität auftritt. Sie können diese Ausgabe auch als "Zur Diskussion" oder "Gute erste Ausgabe" bezeichnen, und ich werde sie offen lassen. Vielen Dank für Ihre Beiträge.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen