React-native-iap: L'achat du produit `android.test.canceled` bloque l'application

Créé le 28 janv. 2019  ·  5Commentaires  ·  Source: dooboolab/react-native-iap

Version de react-native-iap

2.4.0-bêta8

Version de react-native

0,55,4

Plateformes sur lesquelles vous avez rencontré l'erreur (IOS ou Android ou les deux?)

Android

Comportement prévisible

La promesse d'achat est rejetée avec E_USER_CANCELLED, "Cancelled."

Comportement réel

L'application plante:

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)

Environnement testé (émulateur? Real Device?)

Appareil réel

Étapes pour reproduire le comportement

  • Achetez le produit de test statique Android android.test.canceled
  • Lorsque onPurchasesUpdated est invoqué, un NPE est lancé à la ligne 436 Purchase purchase = purchases.get(0); car purchases est @Nullable et  null tandis que responseCode est égal à 0.
🐛 bug 🚶🏻 stale 🤖 android

Commentaire le plus utile

@johnmartel Ouais. Je souhaite toujours implémenter des modules de test mais actuellement, je manque toujours de temps 😿. Nous devrons vérifier nous-mêmes le temps d'exécution avant de publier.

Tous les 5 commentaires

Merci pour le problème avec la solution. @johnmartel J'espère que vous nous donnerez un PR si vous savez déjà comment résoudre le problème.

@hyochan Je travaille sur le problème en ce moment, je soumettrai un PR dès que possible. Le problème est que la bibliothèque manque cruellement de tests et il est difficile d'être sûr que je ne casse rien d'autre.

@johnmartel Ouais. Je souhaite toujours implémenter des modules de test mais actuellement, je manque toujours de temps 😿. Nous devrons vérifier nous-mêmes le temps d'exécution avant de publier.

Que diriez-vous simplement de vérifier si les purchases sont null comme ça?

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

     // ...

Salut, il semble qu'il n'y ait eu aucune activité sur ce problème récemment. Le problème a-t-il été résolu ou nécessite-t-il toujours l'attention de la communauté? Ce problème peut être résolu si aucune autre activité ne se produit. Vous pouvez également étiqueter ce problème comme "Pour discussion" ou "Bon premier numéro" et je le laisserai ouvert. Merci pour vos contributions.

Cette page vous a été utile?
0 / 5 - 0 notes