Po ostatniej sekcji w przewodniku GCM: Getting Started, po otrzymaniu wyników należy wykonać pewne czynności księgowe.GCM: MulticastResult - z jakiego wyniku pochodzi urządzenie?
Cytując z przewodnikiem:
Jest to obecnie niezbędne do analizowania wyników i podjąć odpowiednie działania w następujących przypadkach:
- Jeśli wiadomość została utworzona, ale wynik zwrócony kanoniczną rejestracji Identyfikator, konieczne jest zastąpienie bieżącej rejestracji ID
ID kanoniczną.- Jeśli zwrócony błąd nie został zarejestrowany, konieczne jest usunięcie identyfikatora rejestracji, ponieważ aplikacja została odinstalowana z urządzenia .
Oto fragment kodu, który obsługuje te 2 warunki:
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 } }
Przewodnik powyżej odnosi się do pojedynczego wyniku, a nie w przypadku multicast. nie jestem pewien, jak radzić sobie sprawę 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);
}
przesłać listę urządzeń i otrzymać z powrotem listę wyników. Obiekt wynikowy nie zawiera identyfikatora rejestracji, ale tylko identyfikator kanoniczny, jeśli pierwszy jest nieaktualny. Jest nieudokumentowana, jeśli obie listy są ze sobą powiązane (tj. Zachowuje kolejność i rozmiar).
Jak mogę się upewnić, który wynik dotyczy którego urządzenia?
- UPDATE
mam wklejony fragment rozwiązania w oddzielnym odpowiedź poniżej
dzięki! Właśnie znalazłem tę informację w grupie google GCM (https://groups.google.com/forum/#!topic/android-gcm/DCHHQwqTs8M). Nowy API potrzebuje czasu, by uzyskać odpowiednie dokumenty. – auval
dzięki! zadawałem sobie to samo pytanie! –