React-native-iap: لا يمكن الاتصال بـ iTunes Store لمستخدمي وضع الحماية

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

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

2.2.2

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

iOS

سلوك متوقع

يجب ألا يفشل await RNIap.buyProduct(MIXED_PACK);

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

تلقيت الخطأ Cannot connect to iTunes Store حتى إذا كنت أستخدم مستخدم وضع الحماية

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

جهاز حقيقي ، iPad و iPhone 7

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

فقط حاول تشغيل هذا الجزء من التعليمات البرمجية. لقد قرأت المدونة جيدًا لإنشاء بيئة رمل هنا https://medium.com/@dooboolab/react -native-in-app-Purchase-121622d26b67

📱 iOS 🙏 help wanted

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

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

ال 17 كومينتر

أعتقد أنه رابط قديم. https://developer.apple.com/system-status/

@ raynor85 هل ما زلت تواجه هذه المشكلة؟

dooboolab ما زلت أواجه المشكلة ، لكنني أعتقد أنها مشكلة Apple. لقد حاولت شراء منتج باستخدام معرف Apple الشخصي الخاص بي (والذي تم استخدامه سابقًا في عمليات الشراء الحقيقية) ، وتمكنت من الحصول على رد ناجح بعد تنفيذ RNIap.buyProduct(“my.sku.product”) .
الشيء المضحك في النموذج الذي ينبثق قبل الشراء مباشرة ، تمت كتابته environment: sandbox ، ربما لأنني كنت أقوم بتشغيل إصدار مطور ، والأهم من ذلك أنني أعتقد أنني لم أتحمل رسوم الشراء على الإطلاق. عند التحقق من سجل الشراء ، لا يوجد شيء متعلق بذلك ، وإذا قمت بتنفيذ RNIap.getAvailablePurchases() و RNIap.getPurchaseHistory() حصلت على ردود فارغة من كليهما. لماذا هذا؟

dooboolab هل يمكنك مساعدتي في ذلك؟ هل هناك سبب يجعلني قادرًا باستخدام معرف Apple الحقيقي على شراء عنصر مستهلك بنجاح دون تحصيل رسوم ، ولكن RNIap.getPurchaseHistory() عبارة عن مصفوفة فارغة دائمًا؟

@ raynor85 هل قمت بتوصيل نتيجة المعاملة بالخادم الخاص بك؟

dooboolab لقد حاولت استخدام كل من RNIap.buyProduct(sku) و RNIap.buyProductWithoutFinishTransaction(sku) مع RNIap.finishTransaction() ولكليهما استخدمت RNIap.validateReceiptIos(receiptBody, true); ، مع const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'}; ، لكن لا حظ. وتجدر الإشارة أيضًا إلى أنه أياً كانت كلمة المرور التي أضعها في "[apple-id-password]" ، فإن استجابة validateReceiptIos هي نفسها دائمًا.
هذا مثال:

{ receipt: 
   { receipt_type: 'ProductionSandbox',
     adam_id: 0,
     app_item_id: 0,
     bundle_id: 'io.fantastec.swap',
     application_version: '8',
     download_id: 0,
     version_external_identifier: 0,
     receipt_creation_date: '2018-10-09 19:16:09 Etc/GMT',
     receipt_creation_date_ms: '1539112569000',
     receipt_creation_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
     request_date: '2018-10-09 19:16:10 Etc/GMT',
     request_date_ms: '1539112570436',
     request_date_pst: '2018-10-09 12:16:10 America/Los_Angeles',
     original_purchase_date: '2013-08-01 07:00:00 Etc/GMT',
     original_purchase_date_ms: '1375340400000',
     original_purchase_date_pst: '2013-08-01 00:00:00 America/Los_Angeles',
     original_application_version: '1.0',
     in_app: 
      [ { quantity: '1',
          product_id: 'basic_pack',
          transaction_id: '1000000455003078',
          original_transaction_id: '1000000455003078',
          purchase_date: '2018-10-09 19:16:09 Etc/GMT',
          purchase_date_ms: '1539112569000',
          purchase_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
          original_purchase_date: '2018-10-09 19:16:09 Etc/GMT',
          original_purchase_date_ms: '1539112569000',
          original_purchase_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
          is_trial_period: 'false' } ] },
  status: 0,
  environment: 'Sandbox' }

كما لاحظت ، receipt_type: 'ProductionSandbox' ، والذي يجب أن يكون ناتجًا عن حقيقة أنني أستخدم اسم مستخدم Apple ID حقيقي في بيئة وضع الحماية (لا يمكنني إنشاء مستخدم اختبار عملي ، شكرًا لك Apple على صنع حياتنا جحيم حي).

@ raynor85 في الواقع ، لا أعرف لماذا يحدث هذا. قد أضطر إلى تجربة ذلك في المستقبل القريب. أيضًا ، هل حاولت اختبار ذلك من خلال الرحلة التجريبية؟ إذا لم تقم بتحميل التطبيق إلى test flight أعتقد أنه قد يحدث. أيضا ، أنا أتفق مع آخر اقتباس لك!

لم أحاول تحميل التطبيق على testFlight ، لأنني أرغب في الحصول على إصدار مطور للعمل به قبل احتمال تحميل إصدار تجريبي معطل. ربما يمكن أن يكون برنامج codepush مفيدًا في هذه الحالة. على أي حال ، هل يمكنك من فضلك توضيح معنى const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'} ؟ لقد حاولت وضع أي كلمة مرور ، وما زلت أحصل على نفس النتيجة. هل يمثل password كلمة مرور معرف Apple للمستخدم؟ إذا كان الأمر كذلك ، كيف يمكنني الحصول على هذه المعلومات دون مطالبة المستخدم بإدخالها؟

أيضًا ، ماذا عن accessToken المطلوب مقابل validateReceiptAndroid ؟ لقد تحققت من المنشور المذهل حول تجاوز سعة المكدس الذي ذكرته ، ولكن لا يوجد دليل واضح حول كيفية الحصول على accessToken ، هل توصي بطريقة بسيطة ميتة للحصول على access_token دون بالضرورة إنشاء خادم؟ يقول المستند أنه من الممكن عمل إيصال على الجهاز مباشرة: https://developer.android.com/google/play/billing/billing_library_overview

ههههههههههه

  1. يمكنك التحقق من صحة الإيصال في ios والذي يوضح أن كلمة المرور "تستخدم فقط للإيصالات التي تحتوي على اشتراكات قابلة للتجديد التلقائي. السر المشترك لتطبيقك (سلسلة سداسية عشرية) ._".
  2. لم أجرب هذا في الواقع. لقد قمت بتطوير هذه الميزة للمطورين الآخرين للمساهمة بسهولة ممن هم على دراية بهذه الأشياء. ومع ذلك ، أعتقد أنه يمكنك الحصول على accessToken عبر Play Console. يمكنك الحصول على هذا باتباع العملية.
    حدد التطبيق الخاص بك> الخدمات وواجهات برمجة التطبيقات> "مفتاح الترخيص الخاص بك لهذا التطبيق Base64 المشفر RSA المفتاح العام لتضمينه في الثنائي الخاص بك". مرجع .

يرجى أيضًا تجربة 2.3.5 كإيصال التحقق من الصحة في android. كانت المعلمة ترسل هوية خاطئة في transactionReceipt لـ android. آمل أن تتمكن من ممارسة بعض التمارين مع هذا ومشاركة قصة نجاحك في ملفنا التمهيدي. في صحتك!

@ raynor85 لا يمكنني الحصول على رد من PurchaseHistory () أو getAvailablePurchases () أيضًا. أتساءل ما إذا كانت هذه الوظائف لن تعمل حتى يتم إنتاج التطبيق. JJMoon هل يجب أن تعمل هذه الوظائف في وضع الحماية؟

أدركت الأمر ، لم أكن أسميها "finishTransaction ()" لذلك كنت عالقًا في حلقة في حسابي التجريبي في وضع الحماية "الشراء كان ناجحًا" ولكن لم تتم المعالجة بالكامل من جانب Apple ، فقد أطلقوا عليه اسم حلقة ميتة.

انحرف هذا الموضوع قليلاً عن المسار الصحيح ، لكني أرى نفس الخطأ الأصلي عند تشغيل التطبيق من خلال xcode على جهازي باستخدام حساب وضع الحماية ( Error: Cannot connect to iTunes Store ). أنا في الإصدار 2.3.19 ، والذي أعتقد أنه الأحدث.

ملاحظة من Apple بخصوص هذا الخطأ: https://developer.apple.com/library/archive/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228 -CH1-ERROR_MESSAGES-CANNOT_CONNECT_TO_ITUNES_STORE

أعتقد أنه في حالتي ، أتلقى هذا الخطأ عند محاولة الاشتراك في أحد المنتجات عندما اشتركت فيه بالفعل. يبدو أيضًا أنه يظهر عندما أشترك وأحاول تغيير اشتراكي (عن طريق بدء طلب جديد RNIAP.buySubscription .

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

أعتقد أنه في حالتي ، أتلقى هذا الخطأ عند محاولة الاشتراك في أحد المنتجات عندما اشتركت فيه بالفعل. يبدو أيضًا أنه يظهر عندما أشترك وأحاول تغيير اشتراكي (عن طريق بدء طلب RNIAP.buySubscription جديد.

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

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