2013-06-26 14 views
16

Abbiamo lavorato a un'implementazione GCM e abbiamo notato che l'indirizzo di un dispositivo assegnato a un'installazione di un'app può essere acceso anche se l'app viene disinstallata.I vecchi token GCM rimangono attivi anche dopo una disinstallazione?

Così installiamo un'app, otteniamo il token A, il dispositivo si abbona ad un particolare tipo di avviso 1, token di messaggio A con grande successo. Quindi disinstalliamo l'app.

No reinstalliamo, riceviamo token B e il dispositivo si iscrive a un particolare tipo di avviso 2, segnaliamo il token B con grande successo.

Da quando non abbiamo inviato un messaggio al token A tra il momento in cui l'app è stata disinstallata e reinstallata, possiamo ancora inviare messaggi a entrambi i token e l'app li riceve entrambi.

Se avessimo provato a inviare il token messaggio A mentre l'app è stata disinstallata, avremmo potuto ripulirla dalla risposta di Google.

C'è un modo per sapere che il token A non è più tecnicamente valido?

risposta

5

Suppongo che per "token" ci si riferisca effettivamente all'ID di registrazione. I vecchi ID di registrazione possono rimanere attivi per un po '. Tuttavia, Google ti dice che devi aggiornare il tuo regid per una particolare combinazione dispositivo/app per mezzo del canonical ID nella risposta al tuo messaggio inviato.

+0

grazie @nickT, memorizzando ciò ha funzionato perfettamente. "GCM fornisce una funzione denominata" ID di registrazione canonica "per recuperare facilmente da queste situazioni: un ID di registrazione canonico è definito come l'ID dell'ultima registrazione richiesta dall'applicazione.Questo è l'ID che il server deve utilizzare quando invia messaggi a il dispositivo." –

+0

Solo per menzionare qualcosa; Otterrai lo stesso ID di registrazione per lo stesso dispositivo, dopo l'aggiornamento del server gcm di Google. – EvanBlack

10

Dalla documentazione ufficiale:

How uninstalled client app unregistration works

Un'applicazione client può essere automaticamente registrato dopo che è disinstallato. Tuttavia, questo processo non avviene immediatamente. Cosa accade in questo scenario è:

  1. L'utente finale disinstalla l'applicazione client.
  2. Il server delle applicazioni invia un messaggio al server di connessione GCM.
  3. Il server di connessione GCM invia il messaggio al client GCM sul dispositivo.
  4. Il client GCM sul dispositivo riceve il messaggio e rileva che l'app client è stata disinstallata; i dettagli di rilevamento dipendono dalla piattaforma su cui è in esecuzione l'app client.
  5. Il client GCM sul dispositivo informa il server della connessione GCM che l'app client è stata disinstallata.
  6. Il server di connessione GCM contrassegna il token di registrazione per la cancellazione.
  7. Il server delle applicazioni invia un messaggio a GCM.
  8. Il GCM restituisce un messaggio di errore NotRegistered al server delle app .
  9. Il server delle applicazioni deve eliminare il token di registrazione.

Nota che potrebbe richiedere un po 'per il token di registrazione per essere completamente rimosso dal GCM.Pertanto, è possibile che i messaggi inviati durante il passaggio 7 in alto ottengano un ID messaggio valido come risposta, anche se il messaggio non verrà consegnato all'app client. Eventualmente, il token di registrazione verrà rimosso e il server riceverà un errore NotRegistered, senza ulteriori azioni richieste dal server dell'app.

Tuttavia, apparentemente può accadere che si ottiene ancora la notifica per il vecchio ID di registrazione, come affermano gli utenti in altre questioni:

Per questo problema, c'è una funzionalità chiamata "canonica ID":

Canonical IDs

Se un bug nel applicazione client innesca registrazioni multiple per lo stesso dispositivo, può essere difficile per riconciliare lo stato e l'app client potrebbe finire con messaggi duplicati.

L'implementazione di ID canonici può aiutare a recuperare più facilmente da queste situazioni . Un ID di registrazione canonico è il token di registrazione di l'ultima registrazione richiesta dall'app client. Questo è l'ID che il server deve utilizzare quando invia messaggi al dispositivo.

Se si tenta di inviare un messaggio utilizzando un vecchio token di registrazione, sarà GCM processo di richiesta, come al solito, ma includerà l'ID canonica nel campo registration_id della risposta. Assicurarsi di sostituire il token di registrazione memorizzato nel server con questo ID canonico, come alla fine il vecchio token di registrazione smetterà di funzionare.

+0

È interessante notare che abbiamo una discrepanza molto ampia tra i dispositivi considerati da GCM come attivi, ma per i quali non è stata rilevata alcuna attività da parte dell'utente per più di un anno. Inoltre, il numero di dispositivi attivi nel dashboard di Google Play è significativamente inferiore al numero di dispositivi a cui vengono inviati i messaggi GCM e non viene segnalato alcun errore. – silentser

Problemi correlati