2012-02-08 70 views
2

我试图找出我怎么能听?‘取消’按钮,在出现的‘确认’警报当用户尝试购买的东西中。你知道,由苹果公司完成的官方产品看起来像这样:“确认你的应用内购买。你想以$价格购买一件$产品吗? [取消] [求购]”在应用程序内购买:倾听“取消”按钮

如果我没有理解错我的代码,这样的事情引发警报:

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

所以基本上我想要做的事情,如果他们打取消非常感谢

回答

7

实现从SKPaymentTransactionObserver ProtocolpaymentQueue: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; 
     } 
    } 
}