アプリ内購入に StoreKit を使用しています。ユーザーが [キャンセル] ボタンを押したときの API の動作が風変わりであることがわかりました。
たとえば、「アプリ内購入の確認」画面でキャンセルを押すと、期待どおりにSKPaymentTransactionStateFailed
取引が行われます。error.code == SKErrorPaymentCancelled
しかし、[購入] を押してから [キャンセル] を押すと、Failed
トランザクションが発生しerror.code == 0
ます。「error.localizedDescription
iTunes Storeに接続できません」は明らかに嘘です。
すべてのトランザクションを無視できるキャンセルとして扱いたくなるかもしれませんが、機内モードでデバイスがオフラインの場合、アラート ポップアップなしでトランザクションが発生Failed
することも明確にわかります。Failed
その場合、ユーザーに問題を説明するように通知する必要があります。
MKStoreKitは、すべての失敗がキャンセルであると想定していることに注意してください。MKStoreManager
のfailedTransaction
メソッドが呼び出されることはありません。常にすべてのトランザクションMKStoreObserver
を呼び出します。コメントはのエラー メッセージを推奨していませんが、これは理にかなっていますが、キャンセルされていないトランザクションについてユーザーに通知するのは誰でしょうか?transactionCanceled
Failed
MKStoreManager.h
transactionCanceled
Failed
これらの障害を処理するためのベスト プラクティスは何ですか? エラーを飲み込むべきですか?冗長であっても、常にエラーを表示しますか?