Boark,
Corona does not request for a registration ID from GCM multiple times. Once a registration ID has been received, Corona caches it and uses that ID from then on.
If you change the project number in your “config.lua” file, then Corona will unregister the last registration ID it has received (if any), and then request a new registration ID with your new project number which will be cached once received. This happens on app startup.
If you remove the project number from your “config.lua” file, then Corona will unregister the last registration ID it had cached (if any) on app startup and then clear the cached registration ID.
The above is pretty well tested, because we thought these would be common issues during testing/experimenting with Google push notifications.
Regarding Google expiring registration IDs, honestly, it isn’t clear to me how Google handles that. I would imagine that Google would send an “unregister” intent to the application, which Corona would then automatically clear its cached registration ID, but I see nothing in Google documentation or sample code that allows us to recognize if the unregister notification was triggered by Corona unregistering itself or if it was initiated by Google. So, Corona will not automatically re-register for a new ID afterwards… but that said, Corona would attempt to re-register on the next app startup since it will recognize that there is no cached registration ID. Note that an app on Android will effectively restart when you press the Back button and then go back into the app.
Anyways, I hope this helps.