サンドボックス ユーザーで更新可能なサブスクリプションの購入をテストしているときに、奇妙なことに気付きました。AppStoreConnect では、チェックボックスを選択して、特定のサンドボックス ユーザーの支払いを中断できます。支払いプロセス中にこれを行う場合
- 支払いは失敗するはずです
- ユーザーは、アプリ ストアの新しい利用規約に同意するよう求められる必要があります。
- そして、同じ製品で新しいトランザクションを PaymentQueue に追加する必要があります
私の問題は次のとおりです。それが発生した後、デリゲートメソッドがトリガーされることはありません。
public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction])
トランザクションを開始すると、正しくトリガーされます。また、ユーザーが T&C を受け入れた後に作成されたトランザクションがキューに追加されたように見えますが、メソッド自体はトリガーされ、別のトランザクションを手動で追加するか、アプリを最小化して再度開いたときにのみトランザクションの処理を開始します。
Apple のドキュメントによると、これはほぼ正しいようです。
StoreKit は、アプリの再開時または実行中に支払いキューの内容が変更されたときに、SKPaymentTransactionObserver インスタンスに自動的に通知できます。
参照用に中断された購入をテストするための Apple ドキュメント: https://developer.apple.com/documentation/storekit/original_api_for_in-app_purchase/testing_in-app_purchases_with_sandbox/testing_an_interrupted_purchase
私の質問は、そのようなトランザクションを処理する方法ですか? この中断されたトランザクションでは、常に「不明」の SKErrorCode で失敗します。これまでに見つけた唯一の実行可能な解決策は、ユーザーにアプリを再起動するように依頼することでしたが、これは受け入れられません。
どんな助けでも大歓迎です。ありがとう!