Forced FCM-token invalidation
Если ваше приложение использует Firebase токены (FCM) для отправки пуш уведомлений пользователям В случае, когда в нем есть личный кабинет, и требуется авторизация
Наш кейс
Пользователь, авторизуясь через нативный аккаунт, заходил к себе в личный кабинет. Если пользователь при этом выходил из этого нативного аккаунта (созданного с помощью регистрации внутри приложения) и авторизовывался через Apple-Sign-In, или Google Auth - ему создавался еще один или несколько аккаунтов (на каждую почту, которой нет на сервере - создается новый). Это приводило к тому, что у пользователя может быть несколько разных аккаунтов на одном девайсе для одного приложения.
Проблема
При переключении пользователем между аккаунтами - FCM токен генерировался один и тот-же, на девайс, в котором запускается приложение. При попытке отправить его на сервер - обратно возвращалась ошибка, что данный токен уже используется (без привязки к тому, что используется он другим аккаунтом).
Задача
Во время логаута - принудительно сбрасывать токен, и каждый раз при авторизации создавать новый и отправлять его на сервер.
Как реализовать
В вашем сервисе, отвечающем за авторизацию, необходимо добавить следующий метод:
func invalidateFCMToken() {
Messaging.messaging().deleteToken() { error in
if let error = error {
Logger.log("#push \(error.localizedDescription)")
}
let _ = Messaging.messaging().fcmToken
Logger.log("#push We are deleting the token with no errors")
}
}
Метод необходимо будет вызвать в тот момент, когда нужно сбросить токен. Например при логауте.
func logout() {
PushService.shared.invalidateFCMToken()
}