Come la domanda dice che Come scoprire quando lo registration ID è diventato non valido nell'API GoogleCloudMessaging? Ho già letto le risposte su alcune domande su argomenti simili: Do GCM registration id's expire? e Google Coud Mesaging (GCM) and registration_id expiry, how will I know?. Il problema con queste domande è che le risposte ci sono per C2DM
o la vecchia API GCM che utilizzava GCMRegistrar anziché l'API di GoogleCloudMessaging. I due metodi precedenti sono stati ammortizzati.Nell'API di GoogleCloudMessaging, come gestire il rinnovo o la scadenza dell'ID di registrazione?
Cercherò di rompere la mia confusione/domanda graduale:
1) Sotto il titolo Enable GCM, nel secondo punto si dice:
Google may periodically refresh the registration ID, so you should design your Android application with the understanding that the com.google.android.c2dm.intent.REGISTRATION intent may be called multiple times. Your Android application needs to be able to respond accordingly.
The registration ID lasts until the Android application explicitly unregisters itself, or until Google refreshes the registration ID for your Android application. Whenever the application receives a com.google.android.c2dm.intent.REGISTRATION intent with a registration_id extra, it should save the ID for future use, pass it to the 3rd-party server to complete the registration, and keep track of whether the server completed the registration. If the server fails to complete the registration, it should try again or unregister from GCM.
2) Ora, se questo è il caso it Dovrei gestire l'intento di un BroadcastReceiver e inviare nuovamente la richiesta register() per ottenere un nuovo ID di registrazione. Ma il problema è che nella stessa pagina sotto la voce ERROR_MAIN_THREAD, si dice che: GCM methods are blocking. You should not run them in the main thread or in broadcast receivers
.
3) capisco anche che ci sono altri due scenari quando cambia ID di registrazione (come indicato sotto Argomenti avanzati nella rubrica Keeping the Registration State in Sync): aggiornamento Applicazione e Backup & ripristino. Li sto già gestendo all'apertura dell'app.
4) In GCMRegistrar API, all'interno GCMBaseIntentService, usato per essere un metodo di callback onRegistered(), che viene però chiamata quando il dispositivo fu registrata. Qui ero solito mantenere l'ID di registrazione e inviarlo a server di terze parti.
Ma, ora Come devo gestire l'aggiornamento o il rinnovo dell'ID di registrazione, persisterlo e inviarlo a server di terze parti?
Potrebbe essere che o mi sto confondendo leggendo tutto o mi manca qualcosa. Sarei davvero grato per il tuo aiuto.
Aggiornamento
Anche su Handling registration ID changes in Google Cloud Messaging on Android filo, non v'è alcuna menzione di come gestire il rinfresco periodico del Codice da parte di Google?
Possibile duplicato di questo - http://stackoverflow.com/questions/16838654/handling-registration-id-changes-in-google-cloud-messaging-on-android/16839326#16839326 – Eran