2013-04-11 16 views
9

Attualmente sto implementando GCM in un'applicazione con sistema di accesso. Volevo inviare una notifica all'applicazione in base all'utente che ha effettuato l'accesso all'applicazione (un dispositivo, più utenti). Vado attraverso questi processi.GCM con sistema di login

  1. login come "clienti"
  2. Registrati GCM (ottenere ID di registrazione) invia al lato server
  3. Broadcast Notifica fuori per l'utente A
  4. Logout annullare la registrazione
  5. login come "l'utente B "
  6. Registra GCM (ottieni ID di registrazione - di tanto in tanto rientra lo stesso ID di registrazione con l'utente A, a volte restituisci come ID di registrazione diverso)
  7. GCM invia notifica a utente A (anche se l'utente non registra)

Non sono sicuro di come consentire all'applicazione di identificare l'utente che ha effettuato l'accesso al dispositivo e di inviare la notifica solo a quell'utente specifico. Invece dell'utente B effettuato l'accesso e ottenere la notifica dell'utente A. Qualsiasi commento e risposta sarà molto apprezzato! Se hai bisogno di controllare codici specifici dal mio progetto, per favore fammelo sapere.

+0

[questo] (http://developer.android.com/google/gcm/gcm.html) ha una soluzione alla fine per la registrazione e l'annullamento della registrazione. la sua risposta in ritardo, ma potrebbe aiutare qualcuno. – Anitha

risposta

9

L'ID di registrazione identifica un'applicazione specifica su un dispositivo specifico. Non ha alcuna conoscenza sul log-in degli utenti all'interno della tua applicazione. Pertanto, quando annulli la registrazione di GCM (quando l'utente si disconnette), devi chiamare il tuo server per far sapere che l'utente si è disconnesso.

Ciò consentirà al server di sapere che questo utente è disconnesso e il server interromperà l'invio di messaggi GCM ad esso.

Non importa se si ottiene lo stesso ID di registrazione dopo che l'utente A si disconnette e l'utente B accede (anche se si ottiene un nuovo ID di registrazione, il vecchio potrebbe ancora funzionare. Ecco perché GCM restituisce una registrazione canonica ID quando il dispositivo ha più di un ID di registrazione per l'applicazione).

EDIT:

Consente di considerare lo scenario speciale (che dovrebbe essere relativamente rari) in cui l'utente A disconnette dopo che il server ha inviato una notifica, ma la notifica viene consegnato da Google per l'applicazione solo dopo che i registri utente B in Il modo più sicuro per gestire questo caso è ricevere la notifica nella tua domanda e scartarla, senza mostrare nulla all'utente B. Per sapere quando eliminare una notifica ricevuta puoi aggiungere una proprietà user ai tuoi dati di notifica con il nome utente come il suo valore Quando gestisci la notifica nell'app, verifica che la proprietà dell'utente corrisponda all'utente loggato prima di visualizzare la notifica.

+0

Sono d'accordo con questo. Ma potrebbe essere possibile quando GCM è in attesa, ad esempio, di 10 notifiche da inviare al dispositivo e l'utente sta tentando di disconnettersi dal sistema. Potrebbe essere possibile che quando l'utente abbia effettuato correttamente il logout, GCM deve ancora inviare tutte le notifiche. Questa è la mia preoccupazione fino ad ora –

+0

@ IssacZH. Ho modificato la mia risposta per rispondere alla tua preoccupazione. – Eran

+0

Grazie per il feedback. In base alla tua modifica, penso di aver capito l'idea. –