Я только что добавил функцию C2DM в свое приложение для Android.
В настоящий момент происходит следующее, если в моем приложении запущен C2DM.
- Мое приложение отправляет регистрацию Намерение
- Ответ получен моим приложением
Токен устройства извлекается из намерения и отправляется на мой сервер
С этого момента все работает нормально. Клиент получает push-уведомления и т. Д.
Проблема возникает, если происходит следующее:
Пользователь удаляет приложение, не отключая push. (Полностью удалив его не только обновляя)
- Пользователь переустанавливает приложение
Если после шага 5 отправлено push-уведомление, мое приложение все еще получает это уведомление.
Кажется, что токен, который был извлечен из предыдущей установки, все еще активен и повторно связан с новым экземпляром моего приложения.
Это приводит к следующей проблеме:
- Пользователь, который переустанавливает мое приложение, но не намерен получать push-уведомления, не имеет возможности удалить себя из службы, поскольку новый экземпляр приложения не может отменить регистрацию старого токена на моем сервере.
Это ошибка в системе C2DM или что-то не так в моей настройке?
Обновление
Я последовал совету Бердонса и сделал следующее:
В целях тестирования запускать незарегистрированный Intent только при каждом запуске моего приложения.
После того, как я отправил намерение отменить регистрацию, в мое приложение не отправляется push-уведомление с моего сервера. Это, кажется, делает свое дело, но если я сейчас перехожу на экран настроек C2DM и включаю push-уведомления для моего приложения, все старые токены снова становятся активными, и я получаю информацию, на которую я не зарегистрировался в текущей установке моего приложения.
Следующее обновление
Кажется, я не единственный с этой проблемой:
Android C2DM: дублирование сообщения на одном устройстве и в приложении
Я надеялся, что Google будет управлять этими токенами таким образом, что старые токены с того же устройства будут отключены после выпуска нового. Я также ожидаю, что после отправки незарегистрированной Intent все токены для этого приложения и этого устройства будут помечены как недействительные или навсегда удалены с сервера Google. Если это как-то дизайнерское решение Google для особых случаев использования, я не вижу, пожалуйста, просветите меня.