9

Genero notification_key s come descritto here.Notifiche utente - Come recuperare un notification_id perso da GCM?

Supponiamo che a causa di un errore non riesca a memorizzarlo, quindi cerco di ri-registrarmi.
Questa volta ricevo un errore 400 con il messaggio "notification_key already exists".
Questo sembra strano, soprattutto rispetto a registration of a device to GCM, dove è possibile registrarsi tutte le volte che si desidera e ottenere sempre lo stesso ID di registrazione con stato 200.
Ora non riesco a registrarmi di nuovo, e inoltre non posso annullare la registrazione, perché non ho lo notification_id.

C'è un modo per ottenere lo notification_key generato in precedenza da GCM?
Oppure è l'unico modo per registrarsi di nuovo con un diverso notification_key_name?

risposta

4

In base ai documenti, non è possibile ottenere da GCM il notification_key di uno notification_key_name esistente. Se ci pensate, è logico che provare a creare un nuovoper uno notification_key_name esistente vi desse un errore, poiché se non fosse il caso, potreste essere accidentalmente sovrascrivendo gli ID di registrazione di uno esistente notification_key se vi capita per fornire uno notification_key_name esistente per errore.

Si sta confrontando questo con la registrazione di un dispositivo su GCM più volte, ottenendo ogni volta lo stesso ID di registrazione, ma non è una situazione simile. Quando registri un dispositivo su GCM, GCM ha un modo per identificare il dispositivo e sapere che è già registrato e restituire lo stesso ID di registrazione. Con le notifiche degli utenti, ha solo il notification_key_name che hai fornito, e non c'è nulla che ti impedisce di utilizzare lo stesso notification_key_name per più utenti. Cioè, c'è qualcosa che ti ferma - l'errore che hai ottenuto quando provi a creare un notification_key con uno notification_key_name utilizzato in precedenza.

Un modo semplice per superare il problema consiste nel trattare notification_key_name come un identificatore univoco generato dal server. Se non si dispone di un notification_key per un determinato utente (sia perché si tratta di un nuovo utente o perché non è stato archiviato lo notification_key precedentemente acquistato da Google), si genera un nuovo notification_key_name univoco e lo si utilizza per creare un nuovo notification_key. Non devi preoccuparti del vecchio notification_key che non sei riuscito a memorizzare.

Infine si memorizzano sia lo notification_key e notification_key_name in una tabella che contiene l'id utente.

+3

Ha senso per ottenere un errore, ma non ha senso che poi non è possibile recuperare quello che già conoscono ... Se possono identificare un duplicato, potrebbero fornire un'interfaccia per restituirlo ...Come suggerisci di fare il 'notification_key_name' generato dal mio server, significa che il' notification_key_name' generato non sarà uno a uno con il nome utente dell'app, il che rende le cose inutilmente complicate se riesca a recuperare il 'notification_key' .. – xbakesx

+0

@xbakesx Il tuo notification_key_name sarebbe ancora uno a uno con i nomi utente dell'app. Se si genera un notification_key_name per ottenere un notification_key da Google e non si riesce a persistare il tasto notification_key, non si persisterà neanche notfiication_key_name. Quindi si dovrebbe generare un nuovo notification_key_name (per un determinato nome utente) per ottenere un nuovo tasto notification_key, e questo sarebbe l'unico nome_key_key_name associato al nome utente nel proprio DB. – Eran

-1

Se vi capita di conoscere tutti gli ID di registrazione registrati nel gruppo di dispositivi. Quindi cancellali tutti e anche il gruppo di dispositivi verrà eliminato. Successivamente è possibile creare un gruppo di dispositivi con il nome_keykey_name prima utilizzato.

+1

Assicurati di aver bisogno del tasto notification_key per rimuovere l'ID di registrazione? https://firebase.google.com/docs/cloud-messaging/notifications#managing_device_groups – ColdLogic

7

non riesco a trovare alcuna documentazione su di esso, ma è ora possibile recuperare un notification_key per un gruppo di dispositivi facendo una richiesta GET-https://android.googleapis.com/gcm/notification?notification_key_name=my_notification_key_name con le intestazioni di cui hanno bisogno: Authorization: key=my_key, Content-Type: application/json e project_id: my_id.

Si otterrà una risposta come
{ "notification_key": "lost_key" }

+2

Questo funziona per me, grazie! Non riesco a credere a quanto sia pessima la documentazione ... – knezmilos

+0

Adottare questa soluzione, essere consapevoli del fatto che 'Content-Type: application/json' è effettivamente richiesto senza una ragione apparente, non ha senso in quel contesto. D'altra parte, funziona. –