As discussed in this question and everywhere else, Apple now requires apps to include a means for the user to restore completed transactions for In App Purchases.
I'm all for this. The first version of my app somehow made it past review without it (I wasn't aware of this rule at the time, and/or it wasn't being enforced yet), but then I started receiving lots of e-mails from users asking about missing content (there is the Data Storage Guidelines too, and the heavy-downloadable contents aren't backed up).
So let's say I include a 'restore' button somewhere in my UI, that when tapped calls:
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
You could also implement the following delegate functions:
-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue -(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
Then you would know when the restore process was finished or if it failed. You can mix in the usage of queue.transactions.count in paymentQueueRestoreCompletedTransactionsFinished to see if any transactions was restored.
Remember to handle SKPaymentTransactionStateRestored in
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
You might also want to handle the restored transaction(s) the way same as you did with SKPaymentTransactionStatePurchased the transaction(s).