I mean, should my steps be?
1) Get
SKPaymentTransactionStatePurchased
2) Remove it from SKPaymentQueue and provide the content by
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
3) Validate the receipt and then, if it's invalid, block the content i've just provided
Or should i change 2nd step to 3rd instead?
1) Get
SKPaymentTransactionStatePurchased
2) Validate the receipt and then, if it's invalid, dont't provide content
3) Remove it from
SKPaymentQueue
anyway[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
In first scenario user can turn the internet off right after the purchase, so i won't be able to validate the receipt. But in the second, there may occure some problems with internet between step 1 and 2, so i won't finish the transaction and won't provide the content, that would be a bad user experience.
So what way did you choose for your app and why?
My Choice
I've choosen the second scenario, since choosing the first one makes my app be easily cracked by iAP Cracker.