Dopo l'ultima sezione della guida GCM: Getting Started, è necessario eseguire una conservazione dei libri dopo aver ricevuto i risultati.GCM: MulticastResult - quale risultato proviene da quale dispositivo?
Citando dalla guida:
E 'ora necessario analizzare il risultato e prendere l'azione corretta nei seguenti casi:
- Se il messaggio è stato creato, ma il risultato restituito una registrazione canonica ID, è necessario sostituire la registrazione attuale
ID con quella canonica.- Se l'errore restituito è NotRegistered, è necessario rimuovere tale ID di registrazione, poiché l'applicazione è stata disinstallata dal dispositivo .
Ecco un frammento di codice che gestisce questi 2 condizioni:
if (result.getMessageId() != null) { String canonicalRegId = result.getCanonicalRegistrationId(); if (canonicalRegId != null) { // same device has more than on registration ID: update database } } else { String error = result.getErrorCodeName(); if (error.equals(Constants.ERROR_NOT_REGISTERED)) { // application has been removed from device - unregister database } }
La guida sopra si riferisce ad un singolo risultato , e non al caso multicast. Non sono sicuro di come gestire il caso multicast:
ArrayList<String> devices = new ArrayList<String>();
for (String d : relevantDevices) {
devices.add(d);
}
Sender sender = new Sender(myApiKey);
Message message = new Message.Builder().addData("hello", "world").build();
try {
MulticastResult result = sender.send(message, devices, 5);
for (Result r : result.getResults()) {
if (r.getMessageId() != null) {
String canonicalRegId = r.getCanonicalRegistrationId();
if (canonicalRegId != null) {
// same device has more than on registration ID: update database
// BUT WHICH DEVICE IS IT?
}
} else {
String error = r.getErrorCodeName();
if (error.equals(Constants.ERROR_NOT_REGISTERED)) {
// application has been removed from device - unregister database
// BUT WHICH DEVICE IS IT?
}
}
}
} catch (IOException ex) {
Log.err(TAG, "sending message failed", ex);
}
invio un elenco dei dispositivi, e ricevere indietro un elenco di risultati. L'oggetto Risultato non contiene l'ID di registrazione, ma solo un id canonico se il primo è obsoleto. Non è documentato se i due elenchi sono correlati (cioè conserva l'ordine e le dimensioni).
Come posso sapere quale risultato si riferiscono a quale dispositivo?
- AGGIORNAMENTO
ho incollato un frammento della soluzione in una risposta separata sotto
Grazie! Ho appena trovato queste informazioni nel gruppo Google GCM (https://groups.google.com/forum/#!argomento/android-GCM/DCHHQwqTs8M). Ci vuole tempo per le nuove API per ottenere documenti adeguati .. – auval
grazie! mi stava ponendo la stessa domanda! –