2012-02-08 9 views
2

ユーザーが何かを購入しようとしたときに表示される「確認」アラートに表示される「キャンセル」ボタンを聞く方法を理解しようとしています。あなたが知っている、アップルによって行われた公式のものは、次のように見えます。あなたは1つの$製品を$ priceで購入したいですか?私は正しく私のコードを理解していれば、[キャンセル] [購入]」アプリ内購入:「キャンセル」ボタンを聞く?

、アラートはこのような何かによって開始:。彼らはキャンセルヒットした場合

SKPayment *payment = [SKPayment paymentWithProductIdentifier:productIdentifier]; 
[[SKPaymentQueue defaultQueue] addPayment:payment]; 

だから、基本的に私が何かをしたいと思いますおかげ

答えて

7

SKPaymentTransactionObserver ProtocolからpaymentQueue:updatedTransactions:メソッドを実装してありますがtransactionStateと各transactionオブジェクトのerrorを確認することができます

が、私はそのようなものを使用:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 
    for (SKPaymentTransaction *transaction in transactions) { 
     switch (transaction.transactionState) { 
      case SKPaymentTransactionStatePurchased: 
       [self completeTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateFailed: 
       if (transaction.error.code == SKErrorPaymentCancelled) { 
        /// user has cancelled 
        [self finishTransaction:transaction wasSuccessful:NO]; 
       } 
       else if (transaction.error.code == SKErrorPaymentNotAllowed) { 
        // payment not allowed 
        [self finishTransaction:transaction wasSuccessful:NO]; 
       } 
       else { 
        // real error 
        [self finishTransaction:transaction wasSuccessful:NO]; 
        // show error 
       } 
       break; 
      case SKPaymentTransactionStateRestored: 
       [self restoreTransaction:transaction]; 
       break; 
      default: 
       break; 
     } 
    } 
} 
0

使用このような何か:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 
    for (SKPaymentTransaction *transaction in transactions) { 
     switch (transaction.transactionState) { 
      case SKPaymentTransactionStatePurchased: 
       [self completeTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateFailed: 
       if (transaction.error.code == SKErrorPaymentCancelled) { 
        /// user has cancelled 
        [self finishTransaction:transaction wasSuccessful:NO]; 
       } 
       else if (transaction.error.code == SKErrorPaymentNotAllowed) { 
        // payment not allowed 
        [self finishTransaction:transaction wasSuccessful:NO]; 
       } 
       else { 
        // real error 
        [self finishTransaction:transaction wasSuccessful:NO]; 
        // show error 
       } 
       break; 
      case SKPaymentTransactionStateRestored: 
       [self restoreTransaction:transaction]; 
       break; 
      default: 
       break; 
     } 
    } 
}