Firebase AuthuryUser Null на холодном старте из -за KeysetManager не удалось инициализировать на Redmi Note 13 HyperosAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Firebase AuthuryUser Null на холодном старте из -за KeysetManager не удалось инициализировать на Redmi Note 13 Hyperos

Сообщение Anonymous »

Я разрабатываю приложение Android с использованием аутентификации Firebase (электронная почта/пароль) с JetPack Compose и Kotlin. Приложение хранит пользовательские данные локально в хранилище данных и устанавливает флаг «Логгедин» для True после успешной проверки входа и электронной почты. Это заставляет приложение неправильно перенаправить на экране адаптации вместо восстановления сеанса. < /P>
log: < /p>

2025-08-03 10: 39: 59.094 12114-12114 Firebearstorgececel Настройка: хранилище ключа не может загрузить ключ с помощью ID: Firebear_main_key_id_for_storage_crypto ...
2025-08-03 10: 39: 59.094 12114-12114. /> 2025-08-03 10: 39: 59.095 12114-12114 PAWGressApplication com.example.pawgress D Инициализированная автобуса, CurrentUser: null

2025-08-03 10: 39: 59.904 12114-12114 Splashscreen Com.exmem.pame .paw. Session: userId = bu36t4sae8fdqrpcxhmfns2slkm1, flag = true

2025-08-03 10: 40: 01.920 12114-12114 userRepository com.example.pawgress d имеет локальный пользовательский данных: True < /p>
< /blockquote>

Что я попробовал < /p>
  • Обновленная Firebase SDK: используя com.google.firebase: Firebase-auth: 23.2.0 с FireBase-bom: 33.16.0. /> < /li>
    AuthStateListener: добавлен прослушиватель, но он либо не стреляет, либо возвращает NULL в течение 10–20 секунд:
firebaseAuth.addAuthStateListener { auth ->
Log.d("PawgressApplication", "Auth state changed: ${auth.currentUser}")
}
< /code>

[*] Опрос для CurrentUSER: Пробое опрос. Керрентрантор с задержкой, остается null: < /li>
< /ul>
while (firebaseUser == null && retries < maxRetries) {
firebaseUser = firebaseAuth.currentUser
delay(1000)
retries++
}
< /code>

очищенное приложение данных: сбросить приложение с помощью настройки, снова вошли в систему-проблема все еще происходит при холодном запуске. < /p>
< /li>
Оптимизация гиперсоров отключено. Правильно (проверенный флаг true в журналах).

Проверка данных о данных: /> Поиск аналогичных проблем: найденные потоки, упомянутые проблемы с хранилищем ключей на устройствах Miui/Hyperos, но ни один из них не предлагал рабочее исправление. var firebaseUser = firebaseAuth.currentUser
var retries = 0
val maxRetries = 10
val retryDelay = 2000L

Log.d("SplashScreen", "🔍 Initial Firebase user: ${firebaseUser?.uid}")

var authStateReceived = false
val authStateListener = FirebaseAuth.AuthStateListener { auth ->
firebaseUser = auth.currentUser
authStateReceived = true
Log.d("SplashScreen", "🔄 Auth state changed: ${firebaseUser?.uid}")
}

firebaseAuth.addAuthStateListener(authStateListener)

while (!authStateReceived && retries < maxRetries) {
Log.d("SplashScreen", "🔄 Waiting for auth state, retry $retries/$maxRetries")
delay(retryDelay)
retries++
}

firebaseAuth.removeAuthStateListener(authStateListener)

val safeUser = firebaseUser
if (safeUser != null) {
try {
safeUser.reload().await()
Log.d("SplashScreen", "✅ Firebase user reloaded: ${safeUser.uid}, verified: ${safeUser.isEmailVerified}")
} catch (e: Exception) {
Log.e("SplashScreen", "Error reloading Firebase user: ${e.message}")
}
}

val localSessionValid = userRepository.hasValidLocalSession()
val localUser = userRepository.getUser().first()

val isLoggedIn = safeUser != null &&
safeUser.isEmailVerified &&
localUser != null &&
safeUser.uid == localUser.id &&
localSessionValid

val hasLocalUser = userRepository.hasLocalUserData()

Log.d("SplashScreen", "📊 Final state - firebaseUser: ${safeUser?.uid}, isLoggedIn: $isLoggedIn, hasLocalUser: $hasLocalUser")

if (isLoggedIn && hasLocalUser) {
val surveyCompleted = userRepository.isSurveyCompleted().first()
val petNamed = userRepository.isPetNamedFlow().first()

Log.d("SplashScreen", "📋 Survey completed: $surveyCompleted, Pet named: $petNamed")

when {
!surveyCompleted -> onTimeout("survey/1")
!petNamed -> onTimeout("pet_naming")
else -> onTimeout("home")
}
} else {
Log.w("SplashScreen", "⚠️ Incomplete login - redirecting to onboarding")
onTimeout("onboarding")
}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... ed-to-init
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»