React-native-iap: يؤدي شراء منتج "android.test.canceled" إلى تعطل التطبيق

تم إنشاؤها على ٢٨ يناير ٢٠١٩  ·  5تعليقات  ·  مصدر: dooboolab/react-native-iap

نسخة من رد فعل - أصلية - IAP

2.4.0 بيتا 8

نسخة من رد الفعل الأصلي

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 ، يتم طرح NPE في السطر 436 Purchase purchase = purchases.get(0); لأن purchases هو @Nullable و  null بينما responseCode هو 0.
🐛 bug 🚶🏻 stale 🤖 android

التعليق الأكثر فائدة

تضمين التغريدة أرغب دائمًا في تنفيذ بعض وحدات الاختبار ولكن الوقت الحالي ينفد مني دائمًا 😿. سيتعين علينا التحقق من وقت التشغيل بأنفسنا قبل الإفراج عنه ..

ال 5 كومينتر

شكرا لمشكلة الحل. johnmartel آمل أن تعطينا PR إذا كنت تعرف بالفعل كيفية حل المشكلة.

hyochan أنا أعمل على المشكلة الآن ،

تضمين التغريدة أرغب دائمًا في تنفيذ بعض وحدات الاختبار ولكن الوقت الحالي ينفد مني دائمًا 😿. سيتعين علينا التحقق من وقت التشغيل بأنفسنا قبل الإفراج عنه ..

ماذا عن مجرد التحقق مما إذا كان 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 التقييمات