This is going to sound like a way more complex answer than it is.
For iOS, Apple requires that you have a button in your app’s user interface that says “Restore purchases” or something similar. They will reject you if you don’t have a button. On the other hand Google seems to prefer that you call store.restore() after the .init() call finishes. Since Google generally doesn’t review apps unless they plan to show case them having a button should be fine. I’ve not heard about Amazon in this regard. The button simply needs to call store.restore() with no parameters.
Now in Apple and Google’s cases, if there is nothing to restore, you won’t get any events telling you there was nothing to restore. This frustrates a lot of developers and most resort to also setting a timer.performWithDelay() of say 10-15 seconds and if nothing has happened in that time they go on. That timer could simply popup a native.showAlert() saying “No purchases to restore”, or you could just not do anything and let the user move along. I’m unsure of how Amazon handles this. I know there was some talk a while back about getting store.restore() to generate an event if nothing was found, but I don’t believe it ever got implemented.
Now in all three store’s cases, your transaction listener will get called once for each restored item. Consumable items are never restored only permanent things are like unlock levels 11-20 or turn off ads. For each of these types, you get one event. In Apple’s case, the transaction type will be “restored”. Easy. For Google and Amazon, the transaction type will be “purchased”. The issue here is if your UI pops up a “Thank you for buying levels 11-20” type message and you get several of these restores in a row, your UI will be flooded with these popups. You can check the time stamp on the transaction and if its older than say 5 minutes, you know the user probably could not buy something, delete the app, reinstall it and hit the restore button that quickly so any transaction older than a few minutes is probably a restoration and you could ignore showing any thing to the user.
Rob