Когда push токены не удаляются после выхода пользователя, устройство продолжает получать уведомления старого аккаунта. Это уже не просто баг уведомлений, а риск утечки данных.

Нужно проверять связку user_id, device_id и push token. При logout старый токен должен быть отвязан от пользователя или помечен неактивным, а при новом входе привязан заново.

Коротко: что сделать

  • Проверить, что приложение отправляет событие logout на backend
  • Проверить таблицу push tokens после выхода
  • Проверить привязку токена к user_id и device_id
  • Проверить вход другим аккаунтом на том же устройстве
  • Проверить, не переиспользуется ли старый токен FCM/APNs

Основные причины

У таких сбоев редко бывает одна универсальная причина. Надежнее идти от факта к факту: где ошибка проявляется, какие данные проходят через систему, что изменилось перед поломкой и на каком шаге цепочка перестает работать.

  • Logout очищает только локальную сессию, но не серверный токен
  • Push token хранится без device_id
  • При новом входе токен добавляется второй строкой
  • Backend отправляет push по всем старым токенам пользователя
  • Удаление токена падает, но ошибка не логируется

Пошаговая диагностика

Диагностику лучше проводить на одном воспроизводимом примере. Так проще увидеть не общий шум, а конкретное место, где интерфейс, сервер, интеграция или внешняя служба начинают вести себя неправильно.

  • Выйти из аккаунта и проверить запись токена в базе
  • Зайти другим аккаунтом на том же устройстве
  • Отправить тестовый push старому и новому пользователю
  • Проверить endpoint unregister/delete token
  • Проверить обработку invalid token от FCM/APNs

Как исправить проблему

Исправление должно закрывать первопричину, а не только маскировать симптом. Если затронуты доступы, платежи, данные клиентов или серверные настройки, сначала сделайте резервную копию и проверьте правку на тестовом сценарии.

  • Добавить серверный logout с отвязкой токена
  • Хранить device_id и token отдельно от user_id
  • Обновлять существующую запись токена при новом входе
  • Фильтровать только активные токены пользователя
  • Удалять или отключать токены по ошибкам доставки

Безопасный план решения

Исправление проверяйте на двух тестовых аккаунтах и одном устройстве. Важно доказать, что после logout старый аккаунт больше не получает уведомления.

Чего не стоит делать

  • Не отправлять push только по device_id без проверки пользователя
  • Не хранить старые токены активными бесконечно
  • Не игнорировать ошибки доставки push
  • Не показывать в push чувствительные данные без необходимости

Что подготовить перед исправлением

  • Платформа: Android, iOS или обе
  • Схема таблицы push tokens
  • Пример user_id и device_id
  • Текст уведомления, которое пришло не тому аккаунту

FAQ

Нужно ли удалять токен физически?

Можно удалить или пометить inactive. Главное, чтобы он не участвовал в отправке старому пользователю.

Почему токен остается после удаления приложения?

Приложение не всегда может отправить событие удаления. Поэтому нужно чистить токены по ошибкам доставки и сроку жизни.

Опасно ли отправлять push старому пользователю?

Да, если в уведомлении есть заказ, имя, сумма, статус или другая персональная информация.

Когда стоит обратиться за помощью

Обращайтесь, если push используются для заказов, оплат, личного кабинета, сообщений или любых персональных событий.

Итог

Проверьте logout, таблицу токенов, device_id и отправку только активным привязкам. Если нужно безопасно исправить push-уведомления, пишите в Telegram @rabotator_support.