The bad news: In the current version of iOS (4.3.x) there is no way to distinguish between the purchase and re-purchase of non-expendable products.
To alleviate the situation, I would recommend two things:
First
After a successful purchase, save the product identifier purchased product in NSUserDefaults on the device. Then you can hide products already purchased from the user and, thus, handle the situation with a re-purchase.
NSUserDefaults copied by iTunes when a user synchronizes their device. Therefore, your saved purchase information is not lost when the user receives a new device.
Second
Save the receipt data with the device identifier on your server. Review the receipt product identifier and device identifier.
If you receive a different receipt with the same product identifier and a combination of device identifiers, then suppose you buy a repeat purchase. At the very least, this will allow you to cover most re-purchase cases.
Assuming a regular iPhone user switches his device every 1-2 years, you will at least cover most re-purchase cases, and perhaps Apple will fix this in the future.
source share