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の問題だと思います。 個人のAppleIDユーザー(以前は実際の購入に使用されていた)で製品を購入しようとしましたが、 RNIap.buyProduct(“my.sku.product”)
実行した後、正常に応答することができました。
面白いのは、購入の直前にポップアップするモーダルにenvironment: sandbox
と書かれていることです。おそらく、開発ビルドを実行していたためです。最も重要なのは、購入に対してまったく課金されていなかったと思います。 購入履歴を確認しても、それに関連するものはなく、 RNIap.getAvailablePurchases()
とRNIap.getPurchaseHistory()
を実行すると、両方から空の応答が返されました。 何故ですか?
@dooboolabあなたはそれで私を助けることができますか? 実際のAppleIDで、請求なしで消耗品を正常に購入できたのに、 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 IDパスワードを表しますか? その場合、ユーザーに挿入を求めずにその情報を取得するにはどうすればよいですか?
また、どの程度accessToken
のために必要なvalidateReceiptAndroid
? あなたが言及したスタックオーバーフローに関する驚くべき投稿を確認しましたが、accessTokenを取得する方法についての明確なガイドはありません。必ずしもサーバーを構築せずにaccess_tokenを取得するための非常に簡単な方法をお勧めしますか? ドキュメントには、デバイスで直接receiveVerificationを実行できると記載されています: https ://developer.android.com/google/play/billing/billing_library_overview
また、AndroidのreceiveValidationとして2.3.5
を試してください。 このパラメータは、AndroidのtransactionReceipt
で間違ったIDを送信していました。 これを使って練習し、Readmeでサクセスストーリーを共有していただければ幸いです。 乾杯!
@ raynor85 PurchaseHistory ()またはgetAvailablePurchases()からも応答を取得できません。 これらの機能は、アプリが本番環境に移行するまで機能しないのではないかと思います。 @JJMoonこれらの関数はサンドボックスモードで動作する必要がありますか?
それを理解したので、私は「finishTransaction()」を呼び出していなかったので、サンドボックステストアカウント「購入は成功しました」でループに陥りましたが、Apple側では完全に処理されませんでした。
このスレッドは少し軌道から外れましたが、サンドボックスアカウント( Error: Cannot connect to iTunes Store
)を使用してデバイスでxcodeを介してアプリを実行すると、同じ元のエラーが表示されます。 私は2.3.19にいますが、これが最新だと思います。
このエラーに関するアップルからのメモ: 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
リクエストを開始することによって)表示されるようです。
他の人が問題に遭遇した場合は、「アプリはシミュレーターで実行されており、アプリ内購入はサポートされていません」にも注意してください。 このエラーが発生する可能性があるもう1つの理由です。 実際のデバイスでこれを行う必要があります。
私の場合、すでにサブスクライブしている製品をサブスクライブしようとすると、このエラーが発生すると思います。 また、サブスクリプションを実行していて、サブスクリプションを変更しようとすると(新しいRNIAP.buySubscriptionリクエストを開始することによって)表示されるようです。
それで、あなたはこの場合何をすることになっていますか? 製品が実際にユーザーによって購入されたかどうかはどうすればわかりますか?..購入を復元しようとしましたが、何も変わらないようです
最も参考になるコメント
他の人が問題に遭遇した場合は、「アプリはシミュレーターで実行されており、アプリ内購入はサポートされていません」にも注意してください。 このエラーが発生する可能性があるもう1つの理由です。 実際のデバイスでこれを行う必要があります。