2015-01-06 13 views
8

Ho un problema con un app utilizzando GCM, lo scenario è questo:Ottenere GCM canonica ID di registrazione senza l'invio di un messaggio

  1. l'applicazione è installata
  2. l'applicazione chiama il metodo registro GCM ottenere la registrazione id "RID-1"
  3. l'applicazione viene disinstallata
  4. l'applicazione è installato di nuovo
  5. l'applicazione chiama il metodo registro GCM ancora ottenere la registrazione id "RID-2"

Nel passaggio 5, ho bisogno di ottenere l'ID di registrazione precedente in modo da poter aggiornare il mio modello.

Limitazioni:
- sto cercando di fare questo senza usare l'archiviazione esterna
- Non riesco ad aggiornare il modello, quando il server invia un messaggio, esso dovrebbe essere fatto dopo la registrazione a causa di un nuovo profilo è creato nell'app per ogni nuovo dispositivo

So che questa informazione è presente nei server di Google perché viene inviata quando si invia un messaggio al vecchio ID di registrazione. Ad esempio, se si invia un messaggio a "RID-1", nella risposta si ottiene che il nuovo ID di registrazione (canonico) è "RID-2". Quello di cui ho bisogno è un modo per ottenere queste informazioni senza inviare un messaggio.

Fatemi sapere se avete bisogno di più contesto.


ho trovato alcune domande relative ma le risposte non si applica a questo scenario:
Registration ID duplication for GCM
gcm canonical id should be updated or not
Persistance of gcm registration id
Google Cloud Messaging - Registration ID status
Android GCM: How to detect registered canonical ids in my own server?
Handling registration ID changes in Google Cloud Messaging on Android
(tutta risposta da @eran)

+1

se non lo si archivia all'esterno dell'app, quando l'app viene disinstallata non è possibile recuperarla. Suggerisco il tuo negozio RID-1 altrove - un server forse – Martin

+0

Lo sto memorizzando nel server, e lo ho al momento di chiamare il metodo di registrazione, ma non ho modo di sapere che "RID-1" è un vecchio ID di registrazione di quel particolare dispositivo – pomber

+0

Hai risolto questo problema? – Ajoy

risposta

5

È possibile specificarenella richiesta /send.

Ho riscontrato che i dispositivi non ricevono alcuna notifica push con l'opzione "dry_run": true, mentre un server riceve la risposta canonical_ids.

Ecco un codice di esempio in Ruby. Potrebbe essere necessario installare gcm Gem in anticipo.

$ gem install gcm

ask_canonical_ids.rb

require 'gcm' 
require 'json' 

API_KEY = "YourApiKey" 
gcm = GCM.new(API_KEY) 

registration_ids = [ 
    'OldRegistrationId', 
] 

option = { data: { 'message' => 'Hello Gcm!' }, dry_run: true } 
response = gcm.send_notification(registration_ids, option) 

p response[:canonical_ids] 

uscita del $ ruby ask_canonical_ids.rb (formattata)

[{ 
    :old => "OldRegistrationId", 
    :new => "NewRegistrationId" 
}] 

Anche in questo caso, il dispositivo non ricevere le notifiche push.

0

Se tutto ciò che serve è che l'utente non debba ricevere una notifica, inviare un messaggio con parametri che l'applicazione non sta cercando. Otterrai il canonico e la tua app cancellerà la notifica se non ha il testo e il messaggio obbligatori.

Ad esempio, il plug-in dell'applicazione Cordova richiede la chiave "messaggio" nei dati ricevuti dal server. Altrimenti non crea una notifica.

So che questo è una specie di trucco, ma penso che date le limitazioni, questo sarà il più facile da raggiungere.

1

Abbiamo bisogno di aggiornare l'ID di registrazione con l'ID canonico (Trovando la posizione dell'indice dell'array). È possibile seguire questo lavoro Ready use Code

Problemi correlati