It’s right here:
https://docs.coronalabs.com/plugin/google-iap-v3/init.html
It shows how to test for the “init” event in the transaction listener and has a note:
" – Perform steps to enable IAP, load products, etc."
You can put store.restore() there on Android as you will know for certain that IAP is initialized at that point. This is only for Google. Amazon and iOS do not generate this event. However, for iOS and Amazon, when store.init() completes, the initialization process is complete and you can safely call store.restore(), store.loadProducts() etc.
That said and let me re-state. If you’re only focused on Amazon, it’s okay to call store.restore() when you get that iniit event. However, if you have any plans on supporting iOS (and macOS, tvOS as well). You will 100% get rejected if there isn’t a button in the user interface that calls store.restore(). If you put restore on a button in a rational place for it and you’ve called store.init() and do nothing else, it should work. Store.init() should be well complete before a human can press a restore purchases button.
store.restore()'s sole purpose is to restore purchases if the user deletes the app and re-installs it. It’s not designed as a tool for you to use to unlock things as a convenience. You should track the things that the user unlocked independently and not depend on store.restore() to unlock the app every time the user runs it. I don’t know if that’s what you’re trying to do. I know others have gone that route instead of maintaining their own unlocked items.
Rob