React-native-iap: Tidak dapat terhubung ke iTunes Store untuk pengguna kotak pasir

Dibuat pada 2 Okt 2018  ·  17Komentar  ·  Sumber: dooboolab/react-native-iap

Versi react-native-IAP

2.2.2

Platform yang Anda hadapi kesalahan (IOS atau Android atau keduanya?)

iOS

Perilaku yang diharapkan

await RNIap.buyProduct(MIXED_PACK); seharusnya tidak gagal

Perilaku sebenarnya

Saya mendapatkan kesalahan Cannot connect to iTunes Store meskipun saya menggunakan pengguna kotak pasir

Lingkungan yang diuji (Emulator? Perangkat Nyata?)

Perangkat nyata, iPad dan iPhone 7

Langkah-langkah untuk mereproduksi perilaku

Coba saja jalankan potongan kode itu. Saya telah membaca Blog secara menyeluruh untuk membuat lingkungan kotak pasir di sini https://medium.com/@dooboolab/react -native-in-app-purchase-121622d26b67

📱 iOS 🙏 help wanted

Komentar yang paling membantu

Untuk orang lain yang mengalami masalah ini, perhatikan juga "Aplikasi Anda berjalan di Simulator, yang tidak mendukung pembelian dalam aplikasi". adalah alasan lain mengapa Anda mendapatkan kesalahan ini. Harus melakukan ini di perangkat nyata.

Semua 17 komentar

Saya pikir ini adalah tautan lama. https://developer.apple.com/system-status/

@ raynor85 Apakah Anda masih menghadapi masalah ini?

@dooboolab Saya masih menghadapi masalah, tapi menurut saya ini adalah masalah Apple. Saya telah mencoba membeli produk dengan pengguna ID Apple pribadi saya (yang sebelumnya telah digunakan untuk pembelian nyata), dan saya bisa mendapatkan respons yang berhasil setelah mengeksekusi RNIap.buyProduct(“my.sku.product”) .
Lucunya dalam modal yang muncul tepat sebelum pembelian tertulis environment: sandbox , mungkin karena saya menjalankan build dev, dan yang terpenting saya pikir saya tidak dikenakan biaya sama sekali untuk pembelian tersebut. Memeriksa riwayat pembelian tidak ada yang berhubungan dengan itu, dan jika saya mengeksekusi RNIap.getAvailablePurchases() dan RNIap.getPurchaseHistory() saya mendapat tanggapan kosong dari keduanya. Mengapa demikian?

@ dooboolab dapatkah Anda membantu saya dengan itu? Apakah ada alasan mengapa dengan ID apel asli saya berhasil membeli barang habis pakai tanpa dikenakan biaya, tetapi RNIap.getPurchaseHistory() selalu berupa larik kosong?

@ raynor85 Apakah Anda menghubungkan hasil transaksi ke server Anda?

@dooboolab Saya telah mencoba menggunakan RNIap.buyProduct(sku) dan RNIap.buyProductWithoutFinishTransaction(sku) dengan RNIap.finishTransaction() , dan untuk keduanya saya telah menggunakan RNIap.validateReceiptIos(receiptBody, true); , dengan const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'}; , tetapi tidak beruntung. Juga perlu dicatat bahwa kata sandi mana pun yang saya masukkan ke dalam '[apple-id-password]', validateReceiptIos respon selalu sama.
Ini contohnya:

{ 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' }

Seperti yang mungkin telah Anda perhatikan, receipt_type: 'ProductionSandbox' , yang seharusnya disebabkan oleh fakta bahwa saya menggunakan nama pengguna ID Apple asli di lingkungan kotak pasir (saya tidak dapat membuat pengguna kotak pasir uji yang berfungsi, terima kasih Apple telah membuat hidup kita seperti neraka).

@ raynor85 Sebenarnya, saya tidak tahu mengapa ini terjadi. Saya mungkin harus mencobanya dalam waktu dekat. Juga, apakah Anda mencoba mengujinya melalui uji terbang? Jika Anda belum mengunggah aplikasi ke test flight Saya pikir itu mungkin terjadi. Juga, saya setuju dengan kutipan terakhir Anda!

Saya belum mencoba mengupload aplikasi di testFlight, karena saya ingin memiliki versi dev untuk digunakan sebelum berpotensi mengupload versi beta yang rusak. Mungkin codepush bisa berguna dalam kasus ini. Bagaimanapun, bisakah Anda menjelaskan arti dari const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'} ? Saya telah mencoba memasukkan kata sandi apa pun, dan saya masih mendapatkan hasil yang sama. Apakah password mewakili kata sandi id apel pengguna? Jika demikian, bagaimana saya bisa mendapatkan informasi itu tanpa meminta pengguna untuk memasukkannya?

Juga, bagaimana dengan accessToken dibutuhkan untuk validateReceiptAndroid ? Saya telah memeriksa posting luar biasa tentang stack overflow yang Anda sebutkan, tetapi tidak ada panduan yang jelas tentang bagaimana saya bisa mendapatkan accessToken, apakah Anda merekomendasikan cara sederhana yang mati untuk mendapatkan access_token tanpa perlu membangun server? Dokumen tersebut mengatakan bahwa dimungkinkan untuk melakukan acceptVerification pada perangkat secara langsung: https://developer.android.com/google/play/billing/billing_library_overview

@ rayon_dewi

  1. Anda dapat memeriksa tanda terima validasi di ios yang menjelaskan bahwa sandinya adalah "_Hanya digunakan untuk tanda terima yang berisi langganan yang dapat diperpanjang secara otomatis. Rahasia bersama aplikasi Anda (string heksadesimal) ._".
  2. Saya belum mencoba ini sebenarnya. Saya telah mengembangkan fitur ini agar pengembang lain dapat berkontribusi dengan mudah yang mengetahui hal-hal ini. Namun, saya pikir Anda bisa mendapatkan accessToken melalui konsol bermain. Anda bisa mendapatkan ini dengan mengikuti proses.
    Pilih aplikasi Anda> Layanan & API> "KUNCI LISENSI ANDA UNTUK APLIKASI INI kunci publik RSA berenkode Base64 untuk disertakan dalam biner Anda". referensi .

Juga, coba 2.3.5 sebagai tanda terima di android. Parameter mengirim identitas yang salah di transactionReceipt untuk android. Saya harap Anda dapat berlatih dengan yang ini dan berbagi kisah sukses Anda di readme kami. Bersulang!

@ raynor85 Saya juga tidak bisa mendapatkan respons dari purchaseHistory () atau getAvailablePurchases (). Saya bertanya-tanya apakah fungsi-fungsi itu tidak akan berfungsi sampai aplikasi dalam produksi. @JJMoon Haruskah fungsi tersebut bekerja dalam mode sandbox?

Mengetahui itu, saya tidak memanggil "finishTransaction ()" jadi saya terjebak dalam lingkaran di akun pengujian kotak pasir saya "Pembelian berhasil" tetapi tidak sepenuhnya diproses di pihak Apple mereka menyebutnya sebagai loop mati.

Utas ini sedikit keluar jalur, tetapi saya melihat kesalahan asli yang sama saat menjalankan aplikasi melalui xcode di perangkat saya dengan akun kotak pasir ( Error: Cannot connect to iTunes Store ). Saya menggunakan 2.3.19, yang saya yakini sebagai yang terbaru.

Catatan dari apel terkait kesalahan ini: https://developer.apple.com/library/archive/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228 -CH1-ERROR_MESSAGES-CANNOT_CONNECT_TO_ITUNES_STORE

Saya rasa dalam kasus saya, saya mendapatkan kesalahan ini saat mencoba berlangganan produk ketika saya sudah berlangganan. Tampaknya juga muncul saat saya berlangganan dan mencoba mengubah langganan saya (dengan memulai permintaan RNIAP.buySubscription .

Untuk orang lain yang mengalami masalah ini, perhatikan juga "Aplikasi Anda berjalan di Simulator, yang tidak mendukung pembelian dalam aplikasi". adalah alasan lain mengapa Anda mendapatkan kesalahan ini. Harus melakukan ini di perangkat nyata.

Saya rasa dalam kasus saya, saya mendapatkan kesalahan ini saat mencoba berlangganan produk ketika saya sudah berlangganan. Tampaknya juga muncul saat saya berlangganan dan mencoba mengubah langganan saya (dengan memulai permintaan RNIAP.buySubscription baru.

Jadi, apa yang harus Anda lakukan dalam kasus ini? Bagaimana saya tahu jika produk tersebut benar-benar dibeli oleh pengguna? .. Saya mencoba memulihkan pembelian, tetapi tidak ada yang berubah

Apakah halaman ini membantu?
0 / 5 - 0 peringkat