Files
mobile-android/docs/FIX_WEBSOCKET_CONNECT.md
k1ngsterr1 569aa34432 feat: Add comprehensive encryption architecture documentation for Rosette Messenger
feat: Implement Firebase Cloud Messaging (FCM) integration documentation for push notifications

docs: Outline remaining tasks for complete FCM integration in the project

fix: Resolve WebSocket connection issues after user registration
2026-01-17 19:04:05 +05:00

3.0 KiB

Fix: WebSocket Connection After Registration

Проблема

После первой регистрации аккаунта в Android приложении не работали запросы на сервер до перезапуска приложения.

Причина

При регистрации или разблокировке аккаунта вызывался ProtocolManager.authenticate() до того, как WebSocket соединение было установлено.

Последовательность была следующая:

  1. Создание/разблокировка аккаунта
  2. Вызов ProtocolManager.authenticate(publicKey, privateKeyHash)
  3. authenticate() вызывает getProtocol().startHandshake()
  4. startHandshake() проверяет что не подключено и вызывает connect(), но затем сразу возвращается
  5. Соединение устанавливается асинхронно, но handshake не происходит вовремя
  6. Приложение переходит к экрану чатов, запросы не проходят

После перезапуска приложения 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.kt
  • app/src/main/java/com/rosetta/messenger/ui/auth/SetPasswordScreen.kt
  • app/src/main/java/com/rosetta/messenger/ui/auth/UnlockScreen.kt

Код изменений

// Было:
ProtocolManager.authenticate(publicKey, privateKeyHash)

// Стало:
ProtocolManager.connect()
kotlinx.coroutines.delay(500) // Даём время на установку соединения
ProtocolManager.authenticate(publicKey, privateKeyHash)

Тестирование

После этого исправления:

  1. Зарегистрируйте новый аккаунт
  2. Сразу после регистрации попробуйте отправить сообщение или выполнить другой запрос
  3. Запросы должны проходить без перезапуска приложения

Дата

11 января 2026