2.2.2
iOS
يجب ألا يفشل await RNIap.buyProduct(MIXED_PACK);
تلقيت الخطأ Cannot connect to iTunes Store
حتى إذا كنت أستخدم مستخدم وضع الحماية
جهاز حقيقي ، iPad و iPhone 7
فقط حاول تشغيل هذا الجزء من التعليمات البرمجية. لقد قرأت المدونة جيدًا لإنشاء بيئة رمل هنا https://medium.com/@dooboolab/react -native-in-app-Purchase-121622d26b67
أعتقد أنه رابط قديم. 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
ههههههههههه
accessToken
عبر Play Console. يمكنك الحصول على هذا باتباع العملية.يرجى أيضًا تجربة 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 جديد.
إذن ، ماذا يفترض بك أن تفعل في هذه الحالة؟ كيف أعرف ما إذا كان المنتج قد تم شراؤه بالفعل من قبل المستخدم؟ .. حاولت استعادة المشتريات ، ولكن لم يتغير شيء
التعليق الأكثر فائدة
بالنسبة لأي شخص آخر يواجه مشكلة ، لاحظ أيضًا أن "تطبيقك قيد التشغيل في Simulator ، وهو ما لا يدعم الشراء داخل التطبيق". هو سبب آخر قد تحصل على هذا الخطأ. يجب القيام بذلك على جهاز حقيقي.