Могут ли старые жетоны GCM жить даже после удаления?
Мы работаем над реализацией GCM и заметили, что адрес устройства, назначенный для установки приложения, может работать, даже если приложение удалено.
Итак, мы устанавливаем приложение, получаем токен A, устройство с большим успехом подписывается на конкретный тип предупреждения 1, токен A A. Затем мы удалим приложение.
Нет, мы переустанавливаем, получаем токен B, и устройство подписывается на конкретный тип предупреждения 2, мы с большим успехом отмечаем токен B.
Теперь, поскольку мы не отправили сообщение в токен A между моментом, когда приложение было удалено и переустановлено, мы все равно можем сообщать обоим токенам, а приложение получает их оба.
Если бы мы попытались использовать токен A, а приложение было удалено, мы могли бы очистить его от ответа Google.
Есть ли способ узнать, что токен A технически уже недействителен?
Ответы
Ответ 1
Я предполагаю, что с помощью "токена" вы на самом деле ссылаетесь на идентификатор регистрации. Старые регистрационные идентификаторы могут оставаться активными некоторое время. Однако Google сообщает вам, что вам необходимо обновить свой регистр для конкретной комбинации устройств и приложений с помощью canonical ID в ответе на ваше отправленное сообщение.
Ответ 2
Из официальной документации:
Как отключена отмена регистрации отложенного клиента
Клиентское приложение может быть автоматически незарегистрировано после того, как оно удален. Однако этот процесс не происходит сразу. Что происходит в этом случае:
- Конечный пользователь удаляет клиентское приложение.
- Сервер приложений отправляет сообщение на сервер соединения GCM.
- Сервер подключения GCM отправляет сообщение клиенту GCM на устройстве.
- Клиент GCM на устройстве получает сообщение и обнаруживает, что клиентское приложение было удалено; детали обнаружения зависят от платформы, на которой работает клиентское приложение.
- Клиент GCM на устройстве информирует о подключении GCM чтобы клиентское приложение было удалено.
- Сервер подключения GCM маркирует регистрационный токен для удаления.
- Сервер приложений отправляет сообщение в GCM.
- GCM возвращает сообщение об ошибке NotRegistered сервер приложений.
- Сервер приложений должен удалить токен регистрации.
Примечание что для маркера регистрации может потребоваться некоторое время удалены из GCM. Таким образом, возможно, что сообщения, отправленные во время шага 7 выше, введите действительный идентификатор сообщения в качестве ответа, хотя сообщение не будет доставлен в клиентское приложение. В конце концов, регистрация токен будет удален, и сервер получит ошибку NotRegistered, без каких-либо дополнительных действий с сервера приложений.
Однако, по-видимому, может случиться так, что вы все равно получите уведомление для старого регистрационного идентификатора, так как пользователи заявляют в других вопросах:
Для этой проблемы существует функция, называемая "канонические идентификаторы":
Канонические идентификаторы
Если ошибка в клиентском приложении вызывает несколько регистраций для то же устройство, может быть сложно согласовать состояние и клиентское приложение может привести к дублированию сообщений.
Реализация канонических идентификаторов может помочь вам более легко восстановить эти ситуации. Идентификатор канонической регистрации - это регистрационный токен последней регистрации, запрошенной клиентским приложением. Это идентификатор что сервер должен использовать при отправке сообщений на устройство.
Если вы попытаетесь отправить сообщение с использованием старого регистрационного токена, GCM будет обрабатывать запрос как обычно, но он будет включать в себя канонический идентификатор в поле registration_id ответа. Обязательно замените регистрационный токен, хранящийся на вашем сервере, с этим каноническим идентификатором, как в конечном итоге старый токен регистрации перестанет работать.