У меня возникли проблемы с настройкой модуля CredentialManager через Hilt. На некоторых устройствах (особенно Redmi Note 9) при запросе входа в Google диспетчер учетных данных выдает сообщение «Не удалось запустить пользовательский интерфейс селектора. Подсказка: убедитесь, что параметр «контекст» является контекстом на основе активности».
Я подозреваю, что проблема заключается в том, что Hilt внедряет @ApplicationContext вместо контекста на основе активности, чтобы создать экземпляр CredentialManager, но в настоящее время я не знаю, как это исправить
Еще одно наблюдение: на некоторых других устройствах (например, Galaxy S23) этой ошибки не происходит, и пользовательский интерфейс входа отображается нормально.
моя аутентификация начинается с ViewModel с внедренным в нее AuthService:
@HiltViewModel
class AuthViewModel @Inject constructor(
private val authService: AuthService,
@ApplicationContext private val context: Context
) : ViewModel() {
fun onEvent(uiEvent: UiEvent) {
when (uiEvent) {
// ....
is UiEvent.OnGoogleSignIn -> {
viewModelScope.launch {
val currentUser = authService.googleSignIn().collect { result ->
// Handle the result
result.fold(
onSuccess = { authResult ->
_uiState.emit(AuthUiState.LoggedIn(authResult.user?.uid ?: ""))
},
onFailure = { exception ->
_uiState.emit(
AuthUiState.Error(
exception.message ?: "An error occurred"
)
)
}
)
}
}
}
}
}
подпись authService выглядит следующим образом (реализация входа в Google — это очень общий вариант, который можно найти в учебниках):
class AuthService @Inject constructor(
@ApplicationContext private val context: Context,
private val usuariosService: UsuariosService
)
А это его модуль:
@Module
@InstallIn(SingletonComponent::class)
object AuthModule {
@Provides
@Singleton
fun provideAuthClient(@ApplicationContext context: Context, usuariosService: UsuariosService): AuthService =
AuthService(context.applicationContext, usuariosService)
}
Если я попытаюсь изменить внедрение контекста authService на @ActivityContext, я получу длинную ошибку Hilt, в которой говорится:
error: [Dagger/MissingBinding] @dagger.hilt.android.qualifiers.ActivityContext android.content.Context cannot be provided without an @Provides-annotated method.
public abstract static class SingletonC implements HiltApplication_GeneratedInjector
Подробнее здесь: https://stackoverflow.com/questions/791 ... elector-ui
CredentialManager, внедренный с помощью Hilt, выдает «Не удалось запустить пользовательский интерфейс селектора» ⇐ Android
Форум для тех, кто программирует под Android
1731428500
Anonymous
У меня возникли проблемы с настройкой модуля CredentialManager через Hilt. На некоторых устройствах (особенно Redmi Note 9) при запросе входа в Google диспетчер учетных данных выдает сообщение «Не удалось запустить пользовательский интерфейс селектора. Подсказка: убедитесь, что параметр «контекст» является контекстом на основе активности».
Я подозреваю, что проблема заключается в том, что Hilt внедряет @ApplicationContext вместо контекста на основе активности, чтобы создать экземпляр CredentialManager, но в настоящее время я не знаю, как это исправить
Еще одно наблюдение: на некоторых других устройствах (например, Galaxy S23) этой ошибки не происходит, и пользовательский интерфейс входа отображается нормально.
моя аутентификация начинается с ViewModel с внедренным в нее AuthService:
@HiltViewModel
class AuthViewModel @Inject constructor(
private val authService: AuthService,
@ApplicationContext private val context: Context
) : ViewModel() {
fun onEvent(uiEvent: UiEvent) {
when (uiEvent) {
// ....
is UiEvent.OnGoogleSignIn -> {
viewModelScope.launch {
val currentUser = authService.googleSignIn().collect { result ->
// Handle the result
result.fold(
onSuccess = { authResult ->
_uiState.emit(AuthUiState.LoggedIn(authResult.user?.uid ?: ""))
},
onFailure = { exception ->
_uiState.emit(
AuthUiState.Error(
exception.message ?: "An error occurred"
)
)
}
)
}
}
}
}
}
подпись authService выглядит следующим образом (реализация входа в Google — это очень общий вариант, который можно найти в учебниках):
class AuthService @Inject constructor(
@ApplicationContext private val context: Context,
private val usuariosService: UsuariosService
)
А это его модуль:
@Module
@InstallIn(SingletonComponent::class)
object AuthModule {
@Provides
@Singleton
fun provideAuthClient(@ApplicationContext context: Context, usuariosService: UsuariosService): AuthService =
AuthService(context.applicationContext, usuariosService)
}
Если я попытаюсь изменить внедрение контекста authService на @ActivityContext, я получу длинную ошибку Hilt, в которой говорится:
error: [Dagger/MissingBinding] @dagger.hilt.android.qualifiers.ActivityContext android.content.Context cannot be provided without an @Provides-annotated method.
public abstract static class SingletonC implements HiltApplication_GeneratedInjector
Подробнее здесь: [url]https://stackoverflow.com/questions/79181944/credentialmanager-injected-with-hilt-throws-failed-to-launch-the-selector-ui[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия