React-native-iap: La compra del producto `android.test.canceled` bloquea la aplicación

Creado en 28 ene. 2019  ·  5Comentarios  ·  Fuente: dooboolab/react-native-iap

Versión de react-native-iap

2.4.0-beta8

Versión de react-native

0.55.4

Plataformas en las que enfrentó el error (¿IOS o Android o ambos?)

Androide

Comportamiento esperado

La promesa de compra se rechaza con E_USER_CANCELLED, "Cancelled."

Comportamiento real

La aplicación se bloquea:

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)

Entorno probado (¿Emulador? ¿Dispositivo real?)

Dispositivo real

Pasos para reproducir el comportamiento

  • Compre el producto de prueba estática de Android android.test.canceled
  • Cuando se invoca onPurchasesUpdated , se lanza una NPE en la línea 436 Purchase purchase = purchases.get(0); porque purchases es @Nullable y  null mientras que responseCode es 0.
🐛 bug 🚶🏻 stale 🤖 android

Comentario más útil

@johnmartel Sí. Siempre deseo implementar algunos módulos de prueba, pero actualmente, siempre se me acaba el tiempo 😿. Tendremos que comprobar el tiempo de ejecución nosotros mismos antes de lanzarlo.

Todos 5 comentarios

Gracias por el problema con la solución. @johnmartel Espero que nos des un PR si ya sabes cómo solucionar el problema.

@hyochan Estoy trabajando en el problema en este momento,

@johnmartel Sí. Siempre deseo implementar algunos módulos de prueba, pero actualmente, siempre se me acaba el tiempo 😿. Tendremos que comprobar el tiempo de ejecución nosotros mismos antes de lanzarlo.

¿Qué tal si compruebas si los purchases son null así?

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

     // ...

Hola, parece que no ha habido actividad sobre este tema recientemente. ¿Se ha solucionado el problema o aún requiere la atención de la comunidad? Este problema puede cerrarse si no se produce más actividad. También puede etiquetar este problema como "Para discusión" o "Buen primer número" y lo dejaré abierto. Gracias por sus aportaciones.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

coldfins picture coldfins  ·  3Comentarios

sanilcgs picture sanilcgs  ·  3Comentarios

safciplak picture safciplak  ·  3Comentarios

jvandenaardweg picture jvandenaardweg  ·  4Comentarios

fergalindez picture fergalindez  ·  5Comentarios