2013-02-05 16 views
14

私はSKPaymentTransactionObserverを実装するクラスを持っています。しかし、購入ボタンをクリックすると、ユーザーがアプリストアにログインしていない場合、既存のIDを要求するか、新しいIDを作成するためのアラートが表示されます。使用がこれ以降、またはその後のログイン資格情報アラートからキャンセルをクリックした場合、私はそのキャンセルの通知を受け取りません。購入ボタンがクリックされた後、画面をカバーするアクティビティビューが表示されるので、ログイン警告がキャンセルされたかどうかを知る必要があります。アプリ内購入のキャンセルされたiTunesログイン警告の検出

私は既にエラーコードSKErrorPaymentCancelledをテストしており、ログイン後に購入プロセスがキャンセルされた場合に動作します。デバイスでテストしています。

手がかりはありますか?プロトコルについての知識の私の不足:私はトランザクションを復元しようとすると、これが唯一の起こった、そしてそれは答えを明らかにすることを言及するのを忘れてしまった

-UPDATE-

謝罪。

+0

ハックの種類がありますが、アラートビューが表示されたときに呼び出さなければならないUIApplicationWillResignActive通知をリッスンすることができます。 – jmstone617

答えて

34

ユーザーが復元購入が実装要求キャンセルしようとした後、キャンセルイベントを検出するには、次の

- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error 
{ 
    // test error.code, if it equals SKErrorPaymentCancelled it's been cancelled 
} 
+0

ちょうど私が探していた、ありがとう! –

+0

これは同じ問題で私を助けました - 私は何時間も壁に頭を打ちつけていて、まともな検索応答を得られませんでした - ありがとう! – wayneh

0

ユーザーは、彼らのアップルIDの資格情報を入力しているプロンプトをキャンセルした場合、トランザクションの状態がSKPaymentTransactionStateFailedです。これは、ユーザーがプロセスから偶発的に出た場合、トランザクションが技術的に「失敗」していないため、混乱する可能性があります。ユーザーが実際に処理を終了したかどうかを検出するには、トランザクションエラー(transaction.error.codeによってアクセスされる)のエラーコードがSKErrorPaymentCancelledであるかどうかを確認します。そうでない場合、アプリは実際にトランザクションを処理する問題を持っていました。スウィフト2.2で

1

public func paymentQueue(queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: NSError) { 
    print("Cancel Transaction") 

} 
6
スウィフト3.0では

public func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) { 
     print("Cancel Transaction"); 
    } 
+0

下の投票...正解が上記の理由で、Swift 2.2に翻訳された正しい答えが続き、これがSwift 3.0になる理由がわかりません – Scooter

関連する問題