2014-05-17 16 views
6

Sto lavorando su un progetto Android che utilizza gcm. Sono venuto a sapere che se disinstalliamo il dispositivo appfrom e reinstallato il più delle volte il dispositivo ottiene un nuovo ID di registrazione. Quindi se non cancelliamo quello vecchio dal server applicazioni e l'aggiornamento, i messaggi verranno inviati a entrambi gli ID e nel la risposta mostrerà l'id canonico. La mia domanda è, a questo punto, il messaggio verrà inviato correttamente a quel dispositivo o no?gcm canonical id deve essere aggiornato o meno

risposta

5

Quando si riceve un ID di registrazione canonico nella risposta di Google, il messaggio è stato accettato dal server GCM e il server GCM tenterà di consegnarlo al dispositivo. Se è effettivamente inviato al dispositivo dipende dal fatto che il dispositivo sia disponibile (cioè connesso a Internet). Quindi se il tuo server invia un messaggio GCM sia al vecchio ID che al nuovo ID, il dispositivo probabilmente riceverà due messaggi.

ID canoniche

Sul lato server, a patto che l'applicazione si comporta bene, tutto dovrebbe funzionare normalmente. Tuttavia, se un bug nell'applicazione attiva più registrazioni per lo stesso dispositivo, può essere difficile per lo stato di riconciliazione e si potrebbe finire con messaggi duplicati.

GCM fornisce una funzione denominata "ID di registrazione canonica" per semplificare il ripristino di 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 si inviano messaggi al dispositivo .

Se in seguito si tenta di inviare un messaggio utilizzando un diverso registrazione ID, GCM sarà elaborare la richiesta, come al solito, ma includerà la canonica ID di registrazione nel campo registration_id del risposta. Assicurati di sostituire l'ID di registrazione memorizzato nel tuo server con questo ID canonico, poiché alla fine l'ID che stai usando non funzionerà più .

(Source)

È possibile superare questo problema assegnando un identificatore univoco per ciascuna istanza dell'applicazione. Se memorizzi quell'identificatore nella memoria esterna del dispositivo, questo non verrà eliminato quando l'app viene disinstallata. Quindi puoi recuperarlo quando l'app viene nuovamente installata. Se si invia questo identificatore al server insieme all'ID di registrazione, è possibile verificare se il proprio server ha un vecchio ID di registrazione per questo identificativo ed eliminarlo.

+2

Eran, sembra che tu sia la persona a chiedere qualsiasi cosa abbia a che fare con gcm: ho apportato una leggera modifica alla tua soluzione memorizzando il ID univoco (username) sul server insieme al regid del dispositivo. Correggimi se sbaglio, ma dovrei stare bene perché sto solo concedendo un regid per utente e posso aggiornarlo di conseguenza. Tuttavia, ciò presuppone comunque che il dispositivo * abbia * sempre il regid più recente (e valido). È sicuro assumerlo? – user1164937

+0

Seconda domanda: ci sono altri casi * di bordo di cui dovrei essere a conoscenza, oltre a questo e per assicurarmi di aggiornare il regid dell'utente con l'id canonico se ce n'è uno fornito? Grazie in anticipo. – user1164937

+0

Ho dimenticato di menzionare che sto utilizzando lo stesso identico procedimento dell'app gcm di esempio di google per registrarsi per il regid - quando le sharedpreferences non ne hanno uno. (Mi scuso per lo spam) – user1164937

0

@Eran Abbiamo due opzioni per rimuovere gli ID di registrazione più vecchi o aggiornare con Chiave e posizione di id canonico. Preferisco aggiornare ... Puoi vedere il mio codice di lavoro a cui ho risposto qui Steps to Update Canonical Ids

Problemi correlati