Do I need to register for push each time that the app is created? Or is it enough to register once, for example after login? What is the best point to call C2DMessaging.register(getApplicationContext(), C2DMConstants.SENDER);
?
No. Its not necessary to register every time when app started. But you have to check whether your registration id is changed by GCM server or not. Because sometimes GCM needs to change registration id and even it does not inform device. So you have to save your registration id in your app and on app start, match the saved id and id returned by GCMRegistrar.getRegistrationId() method. If both are different, save it and also update it on your server.