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.
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...