У меня возникли проблемы с настройкой модуля 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
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение