React-native-iap: قلق بشأن `` getAvailablePurchases () ''

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

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

4.4.3

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

0.61.6

المنصات التي واجهت الخطأ فيها (IOS أو Android أو كليهما؟)

ذكري المظهر

سلوك متوقع

بادئ ذي بدء ، شكرًا لكل الجهود التي بذلتها لإنشاء هذه المكتبة وصيانتها ، نقدرها حقًا.

يجب ألا يعيد getAvailablePurchases() الاشتراك الذي تم إلغاؤه (لم يتم تجديده)

السلوك الفعلي

في بيئة الاختبار (باستخدام الحساب التجريبي مع بطاقة الاختبار) ، عندما أقوم بإجراء اشتراكات في تطبيقي وإلغاء الاشتراك قبل expiracytime (بعد 5 دقائق من الشراء في حساب الاختبار) ، لن يتم إدراج اشتراكي في نتيجة getAvailablePurchases() عند تجاوز expiracytime. وهو السلوك المرغوب.
ومع ذلك ، إذا تركت اشتراكي يتجدد (من خلال عدم الإلغاء قبل فترة التجديد) ، ثم ألغيته بعد ذلك ، فإن getAvailablePurchases() سيظل يسرد اشتراكي ، حتى بعد تجاوز expiracytime. سؤالي هو ، لماذا لا يزال يسرد الاشتراكات التي لم أعد مشتركًا فيها؟

أيضًا ، أريد معرفة التفاصيل المتعلقة getAvailablePurchases() ، هل يتم إجراء مكالمة إلى فواتير google لاسترداد المشتريات المتاحة؟ أم أنها تحتفظ بقائمة الشراء محليًا؟

إعداد الاختبار: https://developer.android.com/google/play/billing/billing_testing#testing -subscriptions

بيئة مختبرة (محاكي؟ جهاز حقيقي؟)

جهاز حقيقي

خطوات إعادة إنتاج السلوك

اشترك في اشتراك ، اتركه يتم تجديده ، ثم قم بإلغائه. سيظل الاشتراك مدرجًا كمشتريات متاحة

🚶🏻 stale

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

darriuk لقد اختبرت للتو إلغاء الاشتراك autoRenewingAndroid على false . لكن! فقط إذا ألغى المستخدم الاشتراك صراحة. في حالة إلغاء الاشتراك بسبب رفض الدفع يبقى الاشتراك ساريًا إلى الأبد. هذه مشكلة كبيرة حقًا تتعلق بالاشتراكات ولا يوجد حل بديل لها. كانت لدي فكرة لمقارنة transactionDate وإذا كان هذا التاريخ متأخرًا عن مدة الاشتراك ، فقم بإلغاء الخدمة من جانبي. ولكن يبدو أن transactionDate هو دائمًا أول تاريخ للدفع مقابل الاشتراك.

ال 11 كومينتر

أود أن أضيف سؤالين. ماذا لو لم نستخدم خدمات الخلفية للتحقق من الصحة. كيف يمكنني فهم الاشتراك الذي تم وإلغاءه من قبل المستخدم. كيف يمكنني التعامل مع ذلك؟.
يوجد أيضًا في حسابي sandbox 6 منتجات اشتراك. كلهم نشيطون كيف يمكن ذلك؟
لـ IOS.

تقترح Apple بشدة استخدام التحقق من صحة الخادم بسبب خطر التعرض للاختراق.

لقد كتبت واجهة برمجة تطبيقات خلفية تأخذ إيصال المستخدم وتتحقق من ذلك. إذا لم يتم العثور على أحدث معاملة ، فهذا يعني أن المستخدم لم يشترك ، لذا فأنا أجعل هذا المستخدم غير مميز (أو أيًا كان ما ترغب في القيام به). أسمي واجهة برمجة التطبيقات هذه عند افتتاح التطبيق. يتحقق تطبيقي يوميًا.

أرى أيضًا سلوكًا مشابهًا مع getAvailablePurchases . السلوك المتوقع هو أنه بعد إلغاء الاشتراك ، يجب أن تعيد طريقة getAvailablePurchases عملية الشراء حتى انتهاء صلاحيتها. بعد انتهاء الصلاحية ، يجب ألا تظهر عملية الشراء في نتائج getAvailablePurchases (مع إضافة فترة سماح مدتها 5 دقائق إذا كان انتهاء الصلاحية ناتجًا عن فشل دفع الاشتراك المتكرر).

السلوك الفعلي بعد إلغاء الاشتراك ، تقوم الطريقة getAvailablePurchases بإرجاع مصفوفة تحتوي على شراء الاشتراك ، _ حتى بعد انتهاء الصلاحية الفرعية_ . الدليل الوحيد على إلغاء العنصر الفرعي هو أنه داخل الكائن الذي تم إرجاعه SubscriptionPurchase تم تعيين الخاصية autoRenewingAndroid على false .

ليس لدي أي دليل عند إزالة الشراء من النتائج التي تم إرجاعها بواسطة getAvailablePurchases . هل يعلم أحد؟

darriuk لقد اختبرت للتو إلغاء الاشتراك autoRenewingAndroid على false . لكن! فقط إذا ألغى المستخدم الاشتراك صراحة. في حالة إلغاء الاشتراك بسبب رفض الدفع يبقى الاشتراك ساريًا إلى الأبد. هذه مشكلة كبيرة حقًا تتعلق بالاشتراكات ولا يوجد حل بديل لها. كانت لدي فكرة لمقارنة transactionDate وإذا كان هذا التاريخ متأخرًا عن مدة الاشتراك ، فقم بإلغاء الخدمة من جانبي. ولكن يبدو أن transactionDate هو دائمًا أول تاريخ للدفع مقابل الاشتراك.

vkachan بقدر ما أتذكر أن transactionDate هو دائمًا بالفعل أول دفعة اشتراك.

تحديث واحد مني: قمت بتشغيل getAvailablePurchases مرة أخرى بعد حوالي 22 ساعة من إلغاء الاشتراك وأخيرًا يتم إرجاع مصفوفة فارغة. يبدو أن خادم الفواتير من Google يستغرق وقتًا طويلاً لتحديث الاستجابة.

سأحاول دفع اشتراك مرفوض اليوم وأرى المدة التي تستغرقها للإزالة من استجابة getAvailablePurchases .

تحديث
لقد اختبرت دفع الاشتراك المرفوض واستغرقت getAvailablePurchases 32 ساعة تقريبًا لإرجاع مصفوفة فارغة. لذا فإن عملية الشراء _does_ ستتم إزالتها في النهاية ، الأمر يستغرق وقتًا

يمكن تأكيد ما يقول darriuk . لقد قمت بتشغيل اشتراك تجريبي انتهى ثم تم تقديم الاشتراك على أنه نشط من getAvailablePurchases لمدة 24 ساعة تقريبًا. ربما هناك طريقة لفرض إعادة التحميل من جانب Googles؟ 🤔

واجهت مشكلات مماثلة ، فإن التعامل مع iap من جانب العميل يمثل فوضى ، الآن باستخدام رد الفعل الأصلي iaphub .
يعتني Iaphub بالتحقق من صحة إيصال الخادم.

tomerdev كيف كانت تجربتك مع iaphub؟ كنت أفكر في الانتقال إلى استخدامه ولكني أردت أن أرى رأي مطور آخر في المنتج.

captaincole لا توجد مشكلة في استخدام iaphub ، لقد نفذت المكتبة وقمت بشراء sandbox بسرعة كبيرة.
بالتأكيد وفر لي الكثير من الوقت. أوصي به إذا كنت لا تستطيع قضاء الكثير من الوقت في رعاية IAP ، فأنا شخصياً أفضل التركيز على تطبيقي.

مرحبًا ، يبدو أنه لم يكن هناك أي نشاط بشأن هذه المشكلة مؤخرًا. هل تم إصلاح المشكلة أم أنها لا تزال تتطلب اهتمام المجتمع؟ قد يتم إغلاق هذه المشكلة في حالة عدم حدوث أي نشاط آخر. يمكنك أيضًا تصنيف هذه المشكلة على أنها "للمناقشة" أو "مشكلة أولى جيدة" وسأتركها مفتوحة. شكرا لمساهماتكم.

إغلاق هذه القضية بعد فترة طويلة من الخمول. إذا كانت هذه المشكلة لا تزال موجودة في الإصدار الأخير ، فلا تتردد في إنشاء مشكلة جديدة بمعلومات محدثة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات