Следуя последнему разделу руководства GCM: Getting Started, после получения результатов нужно вести учет.
Цитата из руководства:
Теперь необходимо проанализировать результат и принять правильное действие в следующих случаях:
- Если сообщение было создано, но в результате вернулся канонический идентификатор регистрации, необходимо заменить текущую регистрацию
ID с каноническим.- Если возвращенная ошибка NotRegistered, необходимо удалить этот идентификатор регистрации, поскольку приложение было удалено из устройства.
Вот фрагмент кода, который обрабатывает эти 2 условия:
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 } }
В приведенном выше руководстве говорится о одиночном результате, а не в случае многоадресной рассылки. Я не уверен, как обращаться с корпусом многоадресной рассылки:
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);
}
Я представляю список устройств и получаю список результатов. Объект Result не содержит идентификатор регистрации, а только канонический идентификатор, если первый из них устарел. Это недокументировано, если два списка взаимосвязаны (т.е. Сохраняет порядок и размер).
Как я могу быть уверен, какой результат относится к какому устройству?
- ОБНОВЛЕНИЕ
Я вставлял фрагмент решения в отдельный ответ ниже