Do you have a general data file that saves all of the game information like levels completed, scores, etc? If so I'd suggest implementing some xor encryption on that file, store the key in your bytecode, and then you can simply set a flag for the purchases. Still hackable, but fairly difficult.
Since AppGameKit won't provide you with the receipt number from Google IAP or iOS IAP you need to rely on your own methods for making a unique code for each purchase.
I don't think you're meant to check for purchase restoration unless the app has been uninstalled. Otherwise it seems like you're calling the IAP API every time the app loads just to confirm a purchase and it might lead to some odd interruptions in game flow. For instance if they can't connect to the internet as is your concern.
Another method is this:
When the user installs the app create a random string or just a few characters and store that somewhere (say the string is "nottaFoo").
When a purchase is made to unlock content then take the IAP product ID string and salt it with your random string. For example, your IAP product ID is "fullgame_unlock" after salting it you'll have "notfullgameta_unlockfoo". Then hash it with SHA1. Now store it in a separate file as your verification code.
You now have "nottaFoo" stored somewhere and you know how you've salted the IAP product ID so you can reproduce that SHA1 verification code.
It will only work for each specific installation of the app since "nottaFoo" is randomly generated. It will be really tough to crack since it's SHA1 and you're salting it with a random string. You could even go further and salt that SHA1 with a specific code and hash it again. If you can store "nottaFoo" in a file with your own xor encryption then it becomes even more difficult to hack. You can add layers on this method until you're satisfied with the level of encryption and hashing. Note that if the user uninstalls the app then they will have to go through the purchase restoration to obtain content access again.
I use a similar, but more convoluted, method to store passwords in our database. I've tried reversing the SHA1 but it seems like that is fairly impossible from the sites I've tried "decrypting" it with. SHA1 with salt is the best way to go in my opinion.
I hope this helps.