Если сейва нет на устройстве, а сообщение про инап пришло, значит это человек когда-то делал покупки и это новая установка, активирую заново, выдаю монетки, это по сути авторестор покупки на андроиде.
ну и листнер в зависимости от ОС, для андроида дебаг режим еще, чтобы тестировать покупки много раз.
elseif transaction.state == iap.TRANS_STATE_PURCHASED then
print("Purchased! iap.TRANS_STATE_PURCHASED", transaction.ident)
broadcast.send(game.IAPPURCHASED, {id=transaction.ident})
if game.platform == game.iOS then
iap.finish(transaction)
end
if game.platform == game.Android then
if game.is_debug then
iap.finish(transaction)
else
iap.acknowledge(transaction)
end
end
https://forum.defold.com/t/in-app-purchases-workflow-on-android/73098