feat: Enhance WebSocket connection handling; prevent duplicate connections and improve reconnection logic
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
package com.rosetta.messenger
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.compose.animation.*
|
||||
import androidx.compose.animation.core.FastOutSlowInEasing
|
||||
import androidx.compose.animation.core.FastOutLinearInEasing
|
||||
@@ -72,17 +74,7 @@ class MainActivity : ComponentActivity() {
|
||||
// 🔔 Инициализируем Firebase для push-уведомлений
|
||||
initializeFirebase()
|
||||
|
||||
// <20> Логируем текущий FCM токен при запуске
|
||||
val prefs = getSharedPreferences("rosetta_prefs", Context.MODE_PRIVATE)
|
||||
val savedToken = prefs.getString("fcm_token", null)
|
||||
if (savedToken != null) {
|
||||
Log.d(TAG, "📱 Current FCM token on app start (short): ${savedToken.take(20)}...")
|
||||
Log.d(TAG, "📱 Current FCM token on app start (FULL): $savedToken")
|
||||
} else {
|
||||
Log.d(TAG, "📱 No FCM token saved yet")
|
||||
}
|
||||
|
||||
// <20>🚀 Предзагружаем эмодзи в фоне для мгновенного открытия пикера
|
||||
// <20> Предзагружаем эмодзи в фоне для мгновенного открытия пикера
|
||||
// Используем новый оптимизированный кэш
|
||||
OptimizedEmojiCache.preload(this)
|
||||
|
||||
@@ -186,6 +178,10 @@ class MainActivity : ComponentActivity() {
|
||||
hasExistingAccount = true
|
||||
// Save as last logged account
|
||||
account?.let { accountManager.setLastLoggedPublicKey(it.publicKey) }
|
||||
|
||||
// 📤 Отправляем FCM токен на сервер после успешной аутентификации
|
||||
account?.let { sendFcmTokenToServer(it) }
|
||||
|
||||
// Reload accounts list
|
||||
scope.launch {
|
||||
val accounts = accountManager.getAllAccounts()
|
||||
@@ -268,8 +264,8 @@ class MainActivity : ComponentActivity() {
|
||||
// Сохраняем токен локально
|
||||
token?.let { saveFcmToken(it) }
|
||||
|
||||
// TODO: Отправляем токен на сервер если аккаунт залогинен
|
||||
// token?.let { sendFcmTokenToServer(it) }
|
||||
// Токен будет отправлен на сервер после успешной аутентификации
|
||||
// (см. вызов sendFcmTokenToServer в onAccountLogin)
|
||||
}
|
||||
|
||||
Log.d(TAG, "✅ Firebase initialized successfully")
|
||||
@@ -286,6 +282,40 @@ class MainActivity : ComponentActivity() {
|
||||
prefs.edit().putString("fcm_token", token).apply()
|
||||
Log.d(TAG, "💾 FCM token saved locally")
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправить FCM токен на сервер
|
||||
* Вызывается после успешной аутентификации, когда аккаунт уже расшифрован
|
||||
*/
|
||||
private fun sendFcmTokenToServer(account: DecryptedAccount) {
|
||||
lifecycleScope.launch {
|
||||
try {
|
||||
val prefs = getSharedPreferences("rosetta_prefs", MODE_PRIVATE)
|
||||
val token = prefs.getString("fcm_token", null)
|
||||
|
||||
if (token == null) {
|
||||
Log.d(TAG, "⚠️ Cannot send FCM token: Token not found")
|
||||
return@launch
|
||||
}
|
||||
|
||||
Log.d(TAG, "📤 Sending FCM token to server...")
|
||||
Log.d(TAG, " Token (short): ${token.take(20)}...")
|
||||
Log.d(TAG, " PublicKey: ${account.publicKey.take(20)}...")
|
||||
|
||||
val packet = PacketPushToken().apply {
|
||||
this.privateKey = account.privateKey
|
||||
this.publicKey = account.publicKey
|
||||
this.pushToken = token
|
||||
this.platform = "android"
|
||||
}
|
||||
|
||||
ProtocolManager.send(packet)
|
||||
Log.d(TAG, "✅ FCM token sent to server")
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "❌ Error sending FCM token to server", e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
||||
Reference in New Issue
Block a user