Después de la última sección en la guía GCM: Getting Started, hay que hacer algunas reservas después de recibir los resultados.GCM: MulticastResult: ¿qué resultado es desde qué dispositivo?
Citando de la guía:
Ahora es necesario analizar el resultado y tomar la acción apropiada en los siguientes casos:
- Si se creó el mensaje pero el resultado devuelto un registro canónica ID, es necesario reemplazar el registro actual
ID con el canónico.- Si el error devuelto es No registrado, es necesario eliminar ese ID de registro, porque la aplicación se desinstaló del dispositivo .
Así es un fragmento de código que se encarga de estas 2 condiciones:
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 guía anterior se refiere a un solo resultado , y no con el caso de multidifusión. No estoy seguro de cómo manejar el caso de multidifusión:
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);
}
envío una lista de dispositivos, y recibir de vuelta una lista de resultados. El objeto Resultado no contiene el ID de registro, pero solo un ID canónico si el primero está obsoleto. No está documentado si las dos listas están relacionadas (es decir, conserva el orden y el tamaño).
¿Cómo puedo estar seguro de qué resultado se refiere a qué dispositivo?
- ACTUALIZACIÓN
me ha pegado un fragmento de la solución en una respuesta por separado a continuación
¡Gracias! Acabo de encontrar esta información en el grupo de GCM google (https://groups.google.com/forum/#!topic/android-gcm/DCHHQwqTs8M). Lleva tiempo que las nuevas API obtengan los documentos adecuados. – auval
¡gracias! me estaba haciendo la misma pregunta! –