ما تحتاج إلى معرفته حول التحقق من متجر التطبيقات (إيصال متجر التطبيقات)

لا يزال لدى StackOverflow الكثير من الأسئلة حول التحقق من صحة اختبارات متجر التطبيقات ، لذلك قررنا كتابة مقال حول هذا الموضوع بتنسيق سؤال وجواب.


صورة


ما هو فحص متجر التطبيقات؟


هذا ملف مشفر بتنسيق PKCS # 7 ، والذي يحتوي على معلومات حول جميع عمليات الشراء في التطبيق. إنه موجود في حزمة التطبيق ويمكن الحصول عليه بسهولة عن طريق الاتصال بـ: Bundle.main.appStoreReceiptURL .


هل هناك دائما هذا الملف؟


إذا كان التطبيق قد تم تنزيله من App Store ، فليست نعم دائمًا. وإذا كان قد تم تثبيته عبر Xcode أو Testflight ، فلن يكون للتطبيق في البداية أي صندوق رمل حتى أول عملية شراء أو استعادة للشيك.


ماذا يعني "التحقق من صحة الشيك"؟


هذا يعني فك تشفير الملف وتلقي تاريخ JSON والتحقق من المشتريات التي قام بها المستخدم. يمكنك القيام بذلك محليًا أو عن طريق إرسال طلب إلى Apple.


في أي الحالات يتطلب المطور التحقق من التحقق؟


للتحقق من صحة عملية الشراء المكتملة للتو.
عندما تعرض الكثيرون للهروب من السجن ، كان الأمر ذا صلة: كانت هناك أدوات مساعدة لتزوير شيك. الآن هذه المشكلة لم تعد حادة ، لأن الهروب من السجن أصبح نادرة.


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


عند شراء اشتراكات التجديد التلقائي.
لتحديد حالة الاشتراك الحالية وتاريخ انتهاء الصلاحية.


ما هي المشتريات التي يمكن استعادتها أثناء التحقق من الصحة؟


هناك 4 أنواع من عمليات الشراء داخل التطبيق:


  • مشتريات مستهلكة
  • مشتريات غير مستهلكة
  • اشتراكات غير متجددة
  • اشتراكات التجديد التلقائي
    يمكنك استعادة كل شيء ما عدا المشتريات المستهلكة. وتشمل هذه ، على سبيل المثال ، العملات المعدنية في التطبيق الخاص بك - شيء يمكنك شراء عدة مرات كما تريد. يجب عليك حفظ العدد الحالي من العملات المعدنية على المستخدم على الخادم الخاص بك.

ما أساليب التحقق من الصحة موجودة؟


هناك ثلاثة منهم:


  • التحقق من الصحة المحلية باستخدام OpenSSL ،
  • التحقق من صحة عند الطلب من Apple مباشرة من جهاز iOS ،
  • التحقق من الصحة عند الطلب باستخدام Apple.

ما هي طريقة التحقق من الصحة؟


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


لا توصي Apple بالتحقق من عمليات الفحص على جهاز iOS نفسه. هذا ليس آمناً: يمكن اعتراض الطلب بهجوم رجل في المنتصف.


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


ما هو السر المشترك؟


هذا خط رئيسي خاص ضروري لفك تشفير عمليات الشراء القابلة للتجديد التلقائي. تستخدم Apple السر المشترك كمعلمة في طلب HTTPS إلى Apple.


أين يمكن الحصول على السر المشترك؟


انتقل إلى App Store Connect ، وافتح التطبيق ، واذهب إلى علامة تبويب الميزات ، في قسم المشتريات المدمجة ، سترى المفتاح المشترك لزر التطبيق . قم بإنشاء مفتاح جديد ، إن لم يكن بالفعل.


رمز عينة للتحقق من صحة الاختيار


 func validateReceipt(){ #if DEBUG let urlString = "https://sandbox.itunes.apple.com/verifyReceipt" #else let urlString = "https://buy.itunes.apple.com/verifyReceipt" #endif guard let receiptURL = Bundle.main.appStoreReceiptURL, let receiptString = try? Data(contentsOf: receiptURL).base64EncodedString() , let url = URL(string: urlString) else { return } let requestData : [String : Any] = ["receipt-data" : receiptString, "password" : "YOUR_SHARED_SECRET", "exclude-old-transactions" : false] let httpBody = try? JSONSerialization.data(withJSONObject: requestData, options: []) var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue("Application/json", forHTTPHeaderField: "Content-Type") request.httpBody = httpBody URLSession.shared.dataTask(with: request) { (data, response, error) in // convert data to Dictionary and view purchases }.resume() } 

هذا مثال على التحقق من صحة التحقق على iOS. تذكر استبدال قيمة YOUR_SHARED_SECRET بسر المشترك .


بعد تلقي data ، قم بتحويلها إلى Dictionary :


 DispatchQueue.main.async { if let data = data, let jsonData = try? JSONSerialization.jsonObject(with: data, options: .allowFragments){ // your non-consumable and non-renewing subscription receipts are in `in_app` array // your auto-renewable subscription receipts are in `latest_receipt_info` array } } 

مثال على إيصال فك تشفير متجر التطبيقات


هنا يمكنك أن ترى مثال على شيك مع اثنين من المعاملات في تطبيق مع اشتراك قابل للتجديد التلقائي.


ما الفرق بين in_app و latest_receipt_info ؟


  • يحتوي latest_receipt_info على جميع المعاملات ، بما في ذلك تجديد عمليات الشراء القابلة للتجديد التلقائي. يجب عليك استخدام هذه المجموعة فقط.


  • يحتوي in_app على معاملات المشتريات غير in_app والاشتراكات غير المتجددة. يتم تكرار المعاملة الأولى من اشتراكك المتجدد التلقائي أيضًا هنا. ستظهر المشتريات المستهلكة أيضًا في صفيف in_app ، ولكن بعد ذلك تختفي عندما يكمل المطور المعاملة.



استنتاج


لقد قمنا في Apphud بالتحقق من صحة متجر التطبيقات للتحقق من التطبيقات ذات الاشتراكات القابلة للتجديد التلقائي في SDK مفتوحة المصدر مريحة. يساعدك Apphud أيضًا على تتبع حالة الاشتراك ، وتحليل المقاييس الأساسية ، وتقديم خصومات تلقائيًا للمستخدمين غير المشتركين ، وغير ذلك الكثير. إذا كنت تعاني من الألم أثناء العمل مع الاشتراكات ، فجرّب حلنا مجانًا.

Source: https://habr.com/ru/post/ar472188/


All Articles