React-native-iap: 保留中の購入を手動でキャンセルするにはどうすればよいですか?

作成日 2019年07月29日  ·  8コメント  ·  ソース: dooboolab/react-native-iap

react-native-iapのバージョン

3.3.7

react-nativeのバージョン

0.59.8

エラーに直面したプラットフォーム(IOSまたはAndroid、あるいはその両方?)

アンドロイド

予想される行動

購入をリクエストするとき、サーバーでレシートを検証します。検証に失敗した場合は、acknowledgepurchaseまたはconsumepurchaseを呼び出さない場合、毎回トリガーされる関数purchaseUpdatedListenerの代わりに、手動で購入をキャンセルできるようにします。

実際の動作

購入が完了していない場合、保留中の購入をキャンセルすることはできません。 アンドロイドでは、自動的にキャンセルされるのを待つ必要があります。

テストされた環境(エミュレーター?実デバイス?)

実際のデバイス

動作を再現する手順

購入を行い、acknowledgepurchaseまたはconsumepurchaseを呼び出さないでください。

1️⃣ good first issue ❓ question 🙏 help wanted 🤖 android

最も参考になるコメント

@hyochanfinishTransactionIOSを呼び出して購入履歴から削除することで完了していない購入をキャンセルするために、iOSにそのような機能はありますか? サブスクリプションがまだアクティブであるかどうかを確認する別の方法があるかどうかはわかりませんが、今私がしていることは、受信履歴の最後のトランザクションの有効期限を確認することです。 したがって、購入が完了していない場合は、購入履歴に記録されたくありません。 残念ながら、現時点では、まさにそれが起こっているのです。 また、Androidとは異なり、未完了の購入はしばらく経ってもキャンセルされず、 purchaseUpdateListenerによってトリガーされるのを止めることはありません。

だから私はiOSとAndroidで同じ問題を抱えています、私は完了していない購入をキャンセルする必要があります。 特にiOSでは、サブスクリプションの有効性を確認するためのより効率的な方法がない限り、その購入が履歴に記録されません。

全てのコメント8件

失敗した場合でも、トランザクションが終了するまでacknowledgePurchaseconsumePurchaseを呼び出す必要があります。 自分のデータベースに報酬を与えないなどのロジックを進めないだけです。 また、アプリに残らないようにconsmePurchase使用する必要があります。

@hyochanそうすると、支払いが承認され、ユーザーアカウントに報酬が支払われることなく請求されます。

@tmjordanああ、あなたの言っていることがわかります。 報酬を与えて論理を進めるとどうなりますか?

@hyochanユーザーが商品を購入すると、指定された領収書がGoogleサーバーに送信され、領収書が検証され、購入のステータスが取得されます(支払いが承認された場合、保留中の場合、キャンセルされた場合)。
検証プロセス中にGoogleサーバー(たとえばバックエンド)から来ていないエラーが発生したため、領収書を検証できず、Googleによってキャンセルされるのを待つのではなく、手動で購入をキャンセルしたいとします(その間、私は別の購入をすることはできません)私がaknowledgepurchaseまたはconsumepurchaseを呼び出さない場合。
それが可能かどうかわからない、多分それはグーグルで購入プロセスがどのように機能するかです。

まだ承認または消費されていない購入を手動でキャンセルできると便利です。 そのシナリオでは、支払いが承認された場合、ユーザーは返金されます。
グーグルによってキャンセルされるまで、毎回同じ購入がトリ​​ガーされる代わりに。

@tmjordan良い視点をありがとう。 非常に合理的に聞こえますが、 pending購入が実際に請求されるかどうかはよくわかりません。 pending購入は、 acknowledged場合でも請求されるべきではなく、むしろ削除されるべきだと思います。 他の経験についてさらに詳しく説明できることを願っています。

@hyochanfinishTransactionIOSを呼び出して購入履歴から削除することで完了していない購入をキャンセルするために、iOSにそのような機能はありますか? サブスクリプションがまだアクティブであるかどうかを確認する別の方法があるかどうかはわかりませんが、今私がしていることは、受信履歴の最後のトランザクションの有効期限を確認することです。 したがって、購入が完了していない場合は、購入履歴に記録されたくありません。 残念ながら、現時点では、まさにそれが起こっているのです。 また、Androidとは異なり、未完了の購入はしばらく経ってもキャンセルされず、 purchaseUpdateListenerによってトリガーされるのを止めることはありません。

だから私はiOSとAndroidで同じ問題を抱えています、私は完了していない購入をキャンセルする必要があります。 特にiOSでは、サブスクリプションの有効性を確認するためのより効率的な方法がない限り、その購入が履歴に記録されません。

同様のシナリオを処理したい

  1. ユーザー(時間に敏感な)製品の購入を開始します。 この商品はすぐに返品してください
  2. サーバーは製品の返品に失敗します。 再試行して製品を返品するのが遅れる場合があります
  3. purchaseUpdateListenerは、finishTransactionIOSが呼び出されるまで何度もトリガーされますが、これは望ましい結果ではありません。 この段階でトランザクションをキャンセルする必要があります。

取引をキャンセルする方法はありますか?

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