React-native-iap: サンドボックスユーザーのiTunesStoreに接続できません

作成日 2018年10月02日  ·  17コメント  ·  ソース: dooboolab/react-native-iap

react-native-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

最も参考になるコメント

他の人が問題に遭遇した場合は、「アプリはシミュレーターで実行されており、アプリ内購入はサポートされていません」にも注意してください。 このエラーが発生する可能性があるもう1つの理由です。 実際のデバイスでこれを行う必要があります。

全てのコメント17件

古いリンクだと思います。 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

@ raynor85

  1. 有効な領収書をiOS
  2. 私は実際にこれを試していません。 私は、これらのことを知っている他の開発者が簡単に貢献できるように、この機能を開発しました。 ただし、プレイコンソールからaccessTokenを入手できると思います。 これは、次のプロセスで取得できます。
    アプリを選択>サービスとAPI>「このアプリケーションのライセンスキーBase64でエンコードされたRSA公開キーをバイナリに含める」。 参照

また、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リクエストを開始することによって)表示されるようです。

それで、あなたはこの場合何をすることになっていますか? 製品が実際にユーザーによって購入されたかどうかはどうすればわかりますか?..購入を復元しようとしましたが、何も変わらないようです

このページは役に立ちましたか?
0 / 5 - 0 評価