Theo phần cuối cùng trong hướng dẫn GCM: Getting Started, có một số cuốn sách cần được thực hiện sau khi nhận được kết quả.GCM: MulticastResult - kết quả nào từ thiết bị nào?
Trích dẫn từ hướng dẫn:
Nó bây giờ cần thiết để phân tích kết quả và có những hành động thích hợp trong các trường hợp sau:
- Nếu thông báo đã được tạo ra nhưng kết quả trả về đăng ký kinh điển ID, cần phải thay thế đăng ký hiện tại
ID bằng ID chuẩn.- Nếu lỗi trả về không được đăng ký, bạn cần xóa ID đăng ký đó vì ứng dụng đã được gỡ cài đặt từ thiết bị.
Dưới đây là một đoạn mã để xử lý những 2 điều kiện:
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 } }
Hướng dẫn ở trên đề cập đến một đơn kết quả, chứ không phải trường hợp multicast. Tôi không chắc chắn cách xử lý trường hợp đa hướng:
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);
}
Tôi gửi danh sách thiết bị và nhận lại danh sách kết quả. Đối tượng kết quả không chứa id đăng ký, nhưng chỉ là id chuẩn nếu lần đầu tiên đã lỗi thời. Nó không có giấy tờ nếu hai danh sách có liên quan đến nhau (ví dụ: giữ gìn trật tự và kích cỡ).
Làm cách nào để đảm bảo kết quả nào đề cập đến thiết bị nào?
- CẬP NHẬT
tôi đã dán một đoạn của giải pháp trong một câu trả lời riêng biệt dưới đây
cảm ơn! Tôi vừa tìm thấy thông tin này trong nhóm Google GCM (https://groups.google.com/forum/#!topic/android-gcm/DCHHQwqTs8M). Cần có thời gian để API mới có được tài liệu phù hợp .. – auval
cảm ơn! đã tự hỏi mình cùng một câu hỏi! –