Документация гласит, что 'deleteInstanceId' является блокирующей функцией и ее не следует вызывать в главном потоке. Вы можете вызвать его в фоновом потоке и после завершения создать новый токен.
public void logoutFromFCM() {
// Disable auto initilization
FirebaseMessaging.getInstance().setAutoInitEnabled(false);
//Delete instance
new Thread(() -> {
try {
FirebaseInstanceId.getInstance().deleteInstanceId();
//TODO Generate new token after this
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
Также вы можете установить правильный статус для автоматической инициализации
FirebaseMessaging.getInstance().setAutoInitEnabled(false);
Вы также можете установить егочерез файл манифеста
<meta-data android:name="firebase_messaging_auto_init_enabled"
android:value="false" />
Также убедитесь, что (1) вы отправляете тело сообщения в правильном формате (тип данных или тип уведомления) и обрабатываете правильное состояние переднего плана / фона. (2) Вы отправляете правильные токены. (3) Отправил сообщение в правильном формате (данные или полезные данные уведомления) с сервера. Получить его в правильном формате от Android-клиента. См. этот ответ
Кроме того, на практике нет необходимости удалять токен для выхода из системы. Просто отписаться или отключить при выходе. И вы можете переназначить токен новому или старому пользователю при следующем входе в систему.