4.4.3
0.61.6
アンドロイド
まず第一に、このライブラリを作成および維持するために尽力してくれたすべての努力に感謝します。本当に感謝しています。
getAvailablePurchases()
は、キャンセルされた(更新されていない)サブスクリプションを返さないようにする必要があります
テスト環境(テストカードでテストアカウントを使用)で、アプリでサブスクリプションを作成し、 expiracytime
(テストアカウントで購入してから5分後)の前にサブスクリプションをキャンセルすると、サブスクリプションが表示されませんexpiracytimeを超えた場合のgetAvailablePurchases()
の結果。 これは望ましい動作です。
ただし、サブスクリプションを更新させ(更新期間の前にキャンセルしないことで)、その後キャンセルすると、有効期限を超えた後でも、 getAvailablePurchases()
はサブスクリプションを一覧表示します。 私の質問は、なぜ私がもう購読していない購読がまだリストされているのですか?
また、 getAvailablePurchases()
に関する詳細を知りたいのですが、利用可能な購入を取得するためにGoogleの請求を呼び出しますか? それとも購入リストをローカルに保持しますか?
テスト設定: https ://developer.android.com/google/play/billing/billing_testing#testing -subscriptions
実際のデバイス
サブスクリプションをサブスクライブし、更新してからキャンセルします。 サブスクリプションは引き続き利用可能な購入としてリストされます
いくつか質問を追加したいと思います。 検証にバックエンドサービスを使用しない場合はどうなりますか。 ユーザーが行ったサブスクリプションとキャンセルしたサブスクリプションをどのように理解できますか。 どうすればそれを処理できますか?
また、私のサンドボックスアカウントには、6つのサブスクリプション製品があります。 それらのすべてはそれがどのように可能であるかアクティブです?
iOS用。
Appleは、ハッキングされるリスクがあるため、サーバー検証を使用することを強くお勧めします。
ユーザーのレシートを受け取り、それを確認するバックエンドAPIを作成しました。 最新のトランザクションが見つからない場合は、ユーザーがサブスクライブしていないことを意味するため、そのユーザーを非プレミアム(またはあなたがやりたいこと)にします。 アプリの開始時にこのAPIを呼び出します。 私のアプリは毎日チェックします。
getAvailablePurchases
でも同様の動作が見られます。 予想される動作は、サブスクリプションがキャンセルされた後、 getAvailablePurchases
メソッドは有効期限が切れるまで購入を返す必要があるというものです。 有効期限が切れた後、購入はgetAvailablePurchases
結果に表示されないはずです(有効期限が繰り返しのサブスクリプション支払いの失敗によって引き起こされた場合は、5分の猶予期間が追加されます)。
実際の動作は、サブスクリプションをキャンセルした後、 getAvailablePurchases
メソッドは、 _サブの有効期限が切れた後でもSubscriptionPurchase
オブジェクト内で、 autoRenewingAndroid
プロパティがfalse
設定されていることです。
getAvailablePurchases
によって返された結果から購入が削除されたとき、私にはわかりません。 誰か知っていますか?
@darriukサブスクリプションのキャンセルをテストし、 autoRenewingAndroid
プロパティがfalse
設定されていることを確認しました。 しかし! ユーザーがサブスクリプションを明示的にキャンセルした場合のみ。 支払いが拒否されたためにサブスクリプションをキャンセルした場合、サブスクリプションは永久にアクティブなままになります。 これはサブスクリプションの非常に大きな問題であり、回避策はありません。 transactionDate
を比較することを考えました。この日付がサブスクリプション期間より遅れている場合は、私の側でサービスをキャンセルしてください。 しかし、 transactionDate
は常にサブスクリプションの最初の支払い日であるようです。
@vkachanは、私がtransactionDate
は常に最初のサブスクリプションの支払いに使用されます。
私からの1つの更新:サブスクリプションをキャンセルしてから約22時間後にもう一度getAvailablePurchases
を実行しましたが、最終的に空の配列が返されます。 Googleの課金サーバーが応答を更新するのに時間がかかっているようです。
今日、拒否されたサブスクリプションの支払いを試して、 getAvailablePurchases
応答から削除されるまでにかかる時間を確認します。
アップデート
拒否されたサブスクリプションの支払いをテストしたところ、 getAvailablePurchases
が空の配列を返すのに約32時間かかりました。 購入は最終的に削除されます_does_ので、それだけで起こることは良い時間がかかります。
@darriukが言っていることを確認できます。 終了したテストサブスクリプションを実行しましたが、サブスクリプションはgetAvailablePurchases
から約24時間アクティブとして表示されました。 たぶん、グーグル側によってリロードを強制するいくつかの方法がありますか? 🤔
同様の問題がありましたが、クライアント側でのiapの処理は混乱しており、 react-native-iaphubを使用しています。
Iaphubがサーバー受信の検証を処理します。
@tomerdev iaphubでのあなたの経験はどのようなものでしたか? 私はそれを使用することに移行することを考えていましたが、別の開発者が製品についてどう思っているかを見たかったのです。
@captaincole iaphubを使用しても問題はなく、ライブラリを実装し、サンドボックスの購入をかなり迅速に行いました。
それは間違いなく私に多くの時間を節約しました。 IAPの処理に多くの時間を費やすことができない場合は、これをお勧めします。個人的には、自分のアプリに集中することを好みます。
ねえ、最近この問題に関する活動はなかったようです。 問題は修正されましたか、それともコミュニティの注意が必要ですか? それ以上のアクティビティが発生しない場合、この問題は解決される可能性があります。 この問題に「ディスカッション用」または「良い最初の問題」というラベルを付けることもできます。開いたままにしておきます。 貢献していただきありがとうございます。
長期間使用されなかった後、この問題を解決します。 この問題が最新リリースでも引き続き発生する場合は、最新の情報を使用して新しい問題を作成してください。
最も参考になるコメント
@darriukサブスクリプションのキャンセルをテストし、
autoRenewingAndroid
プロパティがfalse
設定されていることを確認しました。 しかし! ユーザーがサブスクリプションを明示的にキャンセルした場合のみ。 支払いが拒否されたためにサブスクリプションをキャンセルした場合、サブスクリプションは永久にアクティブなままになります。 これはサブスクリプションの非常に大きな問題であり、回避策はありません。transactionDate
を比較することを考えました。この日付がサブスクリプション期間より遅れている場合は、私の側でサービスをキャンセルしてください。 しかし、transactionDate
は常にサブスクリプションの最初の支払い日であるようです。