问题
I am writing code for in-app purchases and using a "Processing..." view with an activity indicator to block the "Buy Now" button once a purchase is initiated. However, how can you tell when the user hits a "Cancel" button since those alert views are coming from the AppStore.app?
Is there a delegate method that gets called when those cancel buttons are pressed? Or is it a matter of your view becoming firstResponder
again? What am I missing here?
If you don't think this is possible, have a look at the "I Am T-Pain" app... they do something very similar and dismiss their view immediately after the cancel button is pressed.
回答1:
Assuming everything is setup correctly you should have an object implementing SKPaymentTransactionObserver which will receive callbacks for transaction success/failure/cancel.
In my example it's the purchaseManager object mentioned in this call
[[SKPaymentQueue defaultQueue] addTransactionObserver:purchaseManager];
When the user cancels a payment you should receive a callback with a transaction state of cancelled:
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
// THIS IS THE STATE YOU SHOULD SEE
[self failedTransaction:transaction];
break;
...
}
You can use this callback to dismiss your view etc...
来源:https://stackoverflow.com/questions/3472627/knowing-when-user-has-pressed-cancel-buttons-during-in-app-purchase