Я использую GoogleCloudMessaging для реализации функции уведомлений в своем приложении. Но у меня проблема: когда я удаляю свое приложение и устанавливаю его снова, я получаю 2 разных идентификатора регистрации, что приводит к дублированию уведомлений в моем приложении. сильный>.
В документе сказано: "< em>Повторные вызовы этого метода вернут исходный идентификатор регистрации"
публичный строковый регистр (String... senderIds)
Зарегистрируйте приложение для GCM и верните идентификатор регистрации. Вы должны вызвать это один раз, когда ваше приложение установлено, и отправить возвращенный регистрационный идентификатор на сервер.
Повторные вызовы этого метода вернут исходный идентификатор регистрации.
Но в другом документе они придумали что-то под названием "< em>Канонические идентификаторы":
Канонические идентификаторы На стороне сервера, пока приложение ведет себя хорошо, все должно работать нормально. Однако, если ошибка в приложении вызывает несколько регистраций для одного и того же устройства, может быть сложно согласовать состояние, и вы можете получить повторяющиеся сообщения.
Итак, как я могу сделать это согласованным со всеми устройствами? Мой (сторонний) сервер хранит только идентификаторы регистрации, которые будут использоваться для отправки уведомлений. А вот и «Канонические идентификаторы», и все стало намного сложнее!
Означает ли это, что я должен отправлять уникальный идентификационный номер для каждого устройства при регистрации?
Это блок кода, который я использовал для регистрации устройства в GoogleCloudMessaging:
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(context);
}
regid = gcm.register(SENDER_ID);
Log.d(TAG, "########################################");
Log.d(TAG, "Current Device's Registration ID is: " + regid);
Map<String, String> data = new HashMap<String, String>();
data.put("regId", regid);
try {
Utils.post(Constants.SERVER_NOTIFY_REG_LINK, data);
Log.d(TAG, "ID registered: " + regid);
} catch (Exception e) {
e.printStackTrace();
}
} catch (IOException ex) {
msg = "Error :" + ex.getMessage();
Log.d(TAG, msg);
}
unique instance ID
во внешнем хранилище не очень хорошо, как вы упомянули. Есть ли что-нибудь более простое, что я мог бы использовать для идентификации устройств? Например ID устройства или что-то в этом роде? Во всяком случае, я буду google это прямо сейчас. Спасибо. 25.09.2014