3.0 KiB
3.0 KiB
Fix: WebSocket Connection After Registration
Проблема
После первой регистрации аккаунта в Android приложении не работали запросы на сервер до перезапуска приложения.
Причина
При регистрации или разблокировке аккаунта вызывался ProtocolManager.authenticate() до того, как WebSocket соединение было установлено.
Последовательность была следующая:
- Создание/разблокировка аккаунта
- Вызов
ProtocolManager.authenticate(publicKey, privateKeyHash) authenticate()вызываетgetProtocol().startHandshake()startHandshake()проверяет что не подключено и вызываетconnect(), но затем сразу возвращается- Соединение устанавливается асинхронно, но handshake не происходит вовремя
- Приложение переходит к экрану чатов, запросы не проходят
После перезапуска приложения ProtocolManager.connect() вызывался в ChatsListScreen, поэтому все работало нормально.
Решение
Добавлен явный вызов ProtocolManager.connect() перед authenticate() в следующих местах:
1. AuthState.kt
- Метод
createAccount()- после создания аккаунта - Метод
unlock()- после разблокировки
2. SetPasswordScreen.kt
- При создании нового аккаунта после установки пароля
3. UnlockScreen.kt
- При разблокировке существующего аккаунта
Добавлена задержка 500ms после connect() для того, чтобы WebSocket успел установить соединение до попытки аутентификации.
Измененные файлы
app/src/main/java/com/rosetta/messenger/providers/AuthState.ktapp/src/main/java/com/rosetta/messenger/ui/auth/SetPasswordScreen.ktapp/src/main/java/com/rosetta/messenger/ui/auth/UnlockScreen.kt
Код изменений
// Было:
ProtocolManager.authenticate(publicKey, privateKeyHash)
// Стало:
ProtocolManager.connect()
kotlinx.coroutines.delay(500) // Даём время на установку соединения
ProtocolManager.authenticate(publicKey, privateKeyHash)
Тестирование
После этого исправления:
- Зарегистрируйте новый аккаунт
- Сразу после регистрации попробуйте отправить сообщение или выполнить другой запрос
- Запросы должны проходить без перезапуска приложения
Дата
11 января 2026