البرمجة

تحديات تنفيذ عمليات الشراء في تطبيقات iOS وكيفية التعامل معها

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

بالنسبة لمشكلة “this in app purchase has already been bought it will be restored for free”، يمكن أن تكون هناك مشكلة في تحديد حالة المعاملة في طابور الدفع (SKPaymentQueue)، لذا يجب التحقق من القيم المرتبطة بكل معاملة.

قد تكون المشكلة أيضًا في السير الزمني للعمليات، فقد يحدث أن تكون هناك مشكلة في التوقيت عندما يتم إجراء المعاملة.

كما يفضل أن تضع تحديثات قائمة المعاملات داخل جزء من الكود يتعامل بشكل أفضل مع معاملات الشراء والاستعادة.

عليك أيضاً أن تتأكد من أنك قمت بتحديد المستمع (delegate) بشكل صحيح لكي يتلقى التحديثات بشكل صحيح.

لضمان تجربة مستخدم سلسة، يفضل أيضاً معالجة الأخطاء بشكل أفضل، بدلاً من تمرير سلسلة فارغة عند حدوث خطأ.

إجمالًا، ينبغي عليك إجراء فحص دقيق للكود والتحقق من أن كل خطوة تعمل بشكل صحيح. قم بتفحص الشروحات الخاصة بواجهة برمجة التطبيقات (API) لـ StoreKit وتأكد من متابعة أفضل الممارسات والتوجيهات الموجودة في توثيق Apple.

في حال استمرار المشكلة، قد يكون من المفيد مشاركة تفاصيل أكثر حول السياق الكامل للمشكلة أو أي رسائل خطأ قد تكون قد تلقيتها.

المزيد من المعلومات

في مشكلتك الحالية، يتضح أنه عندما يقوم المستخدم بمحاولة إجراء عملية شراء لعنصر غير قابل للاستهلاك (non-consumable)، يظهر رسالة تفيد أن هذا العنصر تم شراؤه بالفعل وسيتم استعادته مجانًا، ولكن دالة المراقبة updatedTransactions لا تُستدعى والعملية لا تُنفذ.

أولاً، يجدر بك التحقق من عدم وجود أخطاء في إعدادات حساب المطور والمنتجات داخل واجهة مستخدم App Store Connect. تأكد من أنك قد قمت بنشر العناصر بشكل صحيح وأنها مُكوَّنة بشكل صحيح في التطبيق الخاص بك.

من الرمز المقدم، يظهر أنك قد قمت بتنفيذ دالة makePaymentForProduct لإجراء الشراء و restorePurchases لاستعادة العمليات الشرائية السابقة. ولكن لاحظ أنك تضيف المراقبة (addTransactionObserver) في هاتين الدالتين. من الأفضل تجنب إضافة المراقبة في داخل تلك الدوال المحددة، وبدلاً من ذلك، يُفضل إضافتها في دورة حياة التطبيق، مثل application(_:didFinishLaunchingWithOptions:). هذا يساعد في تجنب مشاكل الإشتراك المكرر للمراقب.

علاوة على ذلك، يمكنك تحسين الشيفرة الخاصة بك بتبسيطها. على سبيل المثال، في دوال completeTransaction و restoreTransaction يتم استدعاء نفس الدالة purchaseSuccessful() وإنهاء العملية بإتمام الصفقة، يمكنك دمج هاتين الدالتين في واحدة واستخدامها في كلتا الحالتين.

بعد تطبيق تلك النصائح، إذا استمرت المشكلة، يمكن أن تكون هناك مشكلة مع الاتصال بخوادم Apple، أو هناك مشكلة في بيئة الاختبار الخاصة بك. يفضل التحقق من تسجيل النشاطات (transaction logs) في واجهة Xcode لفحص التفاصيل الدقيقة لعمليات الشراء والاستعادة.

في النهاية، إذا استمرت المشكلة، قد تحتاج إلى الاتصال بدعم المطورين لدي Apple للمساعدة في تحديد وحل المشكلة.

زر الذهاب إلى الأعلى