In my In App purchase the case SKPaymentTransactionStateRestored: method does not get called when the purchase is restored, instead, case SKPaymentTransaction
[queue restoreCompletedTransactions] will trigger SKPaymentTransactionStateRestored state, where queue is SKPaymentQueue. You should not expect this to be called after your user confirms transactions. Instead user would be warned by the device if he had already purchased the product.