Cercando di implementare i servizi più recenti di google GCM
. Ho letto GCM documentation. Ho anche scaricato & analizzato google's sample implementation. Da tutto quanto sopra ho capito quanto segue:Confuso circa il processo di aggiornamento del token GCM
InstanceId
servizi forniscono le API per generaregcm registration tokens
Si invia & negozio questo generato token nel vostro application server.- Questi token possono essere modificati una volta ogni tanto dal lato client e dal lato del servizio instanceId come menzionato here. Per gestire questa situazione, è necessario implementare
InstanceIDListenerService
e il provider InstanceID chiameraionTokenRefresh
dove basta scrivere la vostra logica per ottenere un nuovo token e inviandola al server (Google's sample app) - C'è qualcosa chiamato
canonical_id
(as mentioned here) (che è l'ultimo registration_id invia da un dispositivo) che il server GCM invia il tuo dispositivo se il tuo server delle applicazioni invia un ID di registrazione più vecchio. Devi sostituire il tuo token esistente nel server con questo canonical_id.
Ora, in seguito sono le mie domande:
InstanceId.getToken
sembra tornare Allo stesso modo, se l'applicazione non viene disinstallato e restituisce abbastanza veloce se il token non è cambiato. Posso chiamare loRegistrationIntentService
ogni volta che avvio l'app? In questo modo ho la certezza di poter lavorare con l'ultimo token tutto il tempo.- Come funziona il
onTokenRefresh
se l'aggiornamento si verifica mentre l'app non è connessa al Play Store (niente internet o qualcosa del genere)? Il providerInstanceId
riprova? Questo è documentato da qualche parte? Cosa succede se allo stesso tempo viene inviata una notifica push? - Che cosa è esattamente un
canonical_id
? è l'ultimo token generato per un dispositivo (avviato daInstanceID.getToken
al client o alInstanceId
end del provider)? Secanonical_id
è effettivamente l'ultimo token gcm, qual è la necessità dell'implementazione dionTokenRefresh
in quanto è comunque possibile analizzare i dati di notifica push e aggiornare il server dell'app se si trova unocanonical_id
fornito?
grazie! Capisco che puoi rimanere all'interno di 'sharedpreferences', come ho fatto per la mia vecchia API GCM (' GCM.register'). Tuttavia, ora sono confuso con questo aggiornamento dei token. La mia domanda di base è se canonical_id inviato è lo stesso dell'ultimo token di quel dispositivo. Perché se questo è il caso, potrebbe non esserci una necessità per l'implementazione di onRefreshToken del tutto. – ranjjose
Perché no? È un processo che ti consente di risolvere i problemi prima che si verifichino (aggiornando il token prima di utilizzare quello vecchio). – royB
Come per i documenti, se trovi un 'registration_id' nella risposta gcm, significa che il token di registrazione che hai nel server delle app non è aggiornato e dovrebbe essere sostituito con quello in 'registration_id'. Il mio problema è che, (1) 'InstanceID service' decide di aggiornare il token e chiama l'implementazione di' onRefreshToken' e lì avresti comunque chiamato 'InstanceID.getToken' e aggiornato il database del server al suo interno. Una volta completato l'aggiornamento, il tuo server delle applicazioni avrà gli ultimi token. Da quel momento in poi, non riesco a trovare un caso in cui trovi 'registration_id' nella risposta gcm. (cont.d) – ranjjose