React-native-iap: Покупка продукта android.test.canceled приводит к сбою приложения

Созданный на 28 янв. 2019  ·  5Комментарии  ·  Источник: dooboolab/react-native-iap

Версия react-native-iap

2.4.0-beta8

Версия react-native

0,55,4

Платформы, на которых вы столкнулись с ошибкой (IOS или Android или оба?)

Android

Ожидаемое поведение

Обещание покупки отклонено с E_USER_CANCELLED, "Cancelled."

Фактическое поведение

Приложение вылетает:

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)

Протестированная среда (Эмулятор? Настоящее устройство?)

Настоящее устройство

Шаги по воспроизведению поведения

  • Приобретите продукт для статического тестирования Android android.test.canceled
  • Когда вызывается onPurchasesUpdated , NPE выдается в строке 436 Purchase purchase = purchases.get(0); потому что purchases - это @Nullable и  null а responseCode равно 0.
🐛 bug 🚶🏻 stale 🤖 android

Самый полезный комментарий

@johnmartel Ага. Я всегда хотел реализовать несколько тестовых модулей, но в настоящее время у меня всегда не хватает времени 😿. Мы должны сами проверить время выполнения перед выпуском ..

Все 5 Комментарий

Спасибо за проблему с решением. @johnmartel Надеюсь, вы дадите нам PR если вы уже знаете, как решить эту проблему.

@hyochan Я работаю над проблемой прямо сейчас, я

@johnmartel Ага. Я всегда хотел реализовать несколько тестовых модулей, но в настоящее время у меня всегда не хватает времени 😿. Мы должны сами проверить время выполнения перед выпуском ..

Как насчет того, чтобы просто проверить, соответствуют ли purchases null так?

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

     // ...

Привет, похоже, в последнее время не было никакой активности по этой проблеме. Проблема устранена или все еще требует внимания сообщества? Эта проблема может быть закрыта, если больше не будет никаких действий. Вы также можете пометить этот вопрос как «Для обсуждения» или «Хороший первый выпуск», и я оставлю его открытым. Спасибо за ваш вклад.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги