React-native-iap: `android.test.canceled`製品を購入するとアプリがクラッシュします

作成日 2019年01月28日  ·  5コメント  ·  ソース: dooboolab/react-native-iap

react-native-iapのバージョン

2.4.0-beta8

react-nativeのバージョン

0.55.4

エラーに直面したプラットフォーム(IOSまたは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が呼び出されると、 purchases@Nullable nullresponseCodeため、行436 Purchase purchase = purchases.get(0);でNPEがスローされます。 responseCodeは0です。
🐛 bug 🚶🏻 stale 🤖 android

最も参考になるコメント

@johnmartelうん。 私は常にいくつかのテストモジュールを実装したいと思っていますが、現在、私は常に時間が不足しています😿。 リリースする前に、ランタイムを自分でチェックする必要があります。

全てのコメント5件

ソリューションの問題をありがとう。 @johnmartelすでに問題の解決方法を知っている場合は、 PRていただければ幸いです。

@hyochan現在、この問題に取り組んでいます。できるだけ早くPRを提出します。 問題は、libにテストが大幅に不足していて、他に何も壊れていないことを確認するのが難しいことです。

@johnmartelうん。 私は常にいくつかのテストモジュールを実装したいと思っていますが、現在、私は常に時間が不足しています😿。 リリースする前に、ランタイムを自分でチェックする必要があります。

purchasesnullようになっているかどうかを確認するのはどうですか?

  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 評価