This guide provides practical code examples demonstrating how to use the Auth0 Android Universal Components SDK in your application.
The simplest way to initialise the SDK is by providing the default values:
private val account: Auth0 by lazy {
Auth0.getInstance(
getString(R.string.com_auth0_client_id),
getString(R.string.com_auth0_domain)
)
}
private val credentialsManager: CredentialsManager by lazy {
CredentialsManager(
AuthenticationAPIClient(account),
SharedPreferencesStorage(this)
)
}
// Initialize Auth0 Universal Components
Auth0UniversalComponents.initialize(
account = account,
tokenProvider = DefaultTokenProvider(credentialsManager),
scheme = getString(R.string.com_auth0_scheme)
)User can provide their own instance of TokenProvider to handle token management.
class CustomTokenProvider : TokenProvider {
override suspend fun fetchCredentials(): Credentials {
// Implementation
}
override suspend fun fetchApiCredentials(audience: String, scope: String? = null): APICredentials {
// Implementation
}
override suspend fun saveApiCredentials(audience: String, credentials: APICredentials) {
// Implementation
}
}
// Initialize Auth0 Universal Components
Auth0UniversalComponents.initialize(
account = account,
tokenProvider = CustomTokenProvider(),
scheme = getString(R.string.com_auth0_scheme)
)
Configuring the PasskeyConfiguration class while initializing the SDK will let the user control
the passkey management within the SDK
val passkeyConfiguration = PasskeyConfiguration(
credentialManager = credentialManager, // User's instance of AndroidX Credentials manager
connection = connection, // Your custom Auth0 DB connection
userIdentity = userIdentity // userIdentity if the user is logged in with a linked account
)
// Initialize Auth0 Universal Components
Auth0UniversalComponents.initialize(
account = account,
tokenProvider = CustomTokenProvider(),
scheme = getString(R.string.com_auth0_scheme),
passkeyConfiguration = passkeyConfiguration
)
The simplest way to add UI components to your app is to call the AuthenticatorSettingsComponent composable function from your application. The SDK will handle all the internal navigation.
@Composable
fun MFASettingsScreen() {
// User application screen composable
AuthenticatorSettingsComponent()
}The SDK supports full theme customization through Auth0ThemeConfiguration. You can customize colors, typography, shapes, dimensions, and sizes to match your brand.
The theming system follows the same pattern as Material3's MaterialTheme:
Auth0Theme { }— composable that provides theme tokens to all descendantsAuth0Theme.colors,Auth0Theme.typography, etc. — accessors for reading tokens inside composables
When no configuration is provided, the component uses the default Auth0 theme:
@Composable
fun MFASettingsScreen() {
AuthenticatorSettingsComponent()
}Override specific color tokens using Auth0Color.light().copy(...):
@Composable
fun MFASettingsScreen() {
AuthenticatorSettingsComponent(
themeConfiguration = Auth0ThemeConfiguration(
color = Auth0Color.light().copy(
backgroundPrimary = Color(0xFFFF6B00), // Brand orange
textOnPrimary = Color.White
)
)
)
}Force dark mode via the Auth0Theme composable's darkTheme parameter, or apply the dark color scheme explicitly:
// Option 1: Force dark mode via Auth0Theme
@Composable
fun MFASettingsScreen() {
Auth0Theme(darkTheme = true) {
AuthenticatorSettingsComponent()
}
}
// Option 2: Explicit dark color scheme
@Composable
fun MFASettingsScreen() {
AuthenticatorSettingsComponent(
themeConfiguration = Auth0ThemeConfiguration(
color = Auth0Color.dark()
)
)
}Customize corner radii across all components:
@Composable
fun MFASettingsScreen() {
AuthenticatorSettingsComponent(
themeConfiguration = Auth0ThemeConfiguration(
shapes = Auth0Shapes(
none = RoundedCornerShape(0.dp),
extraSmall = RoundedCornerShape(8.dp),
small = RoundedCornerShape(12.dp),
medium = RoundedCornerShape(18.dp),
large = RoundedCornerShape(24.dp),
extraLarge = RoundedCornerShape(32.dp),
full = RoundedCornerShape(100.dp)
)
)
)
}Combine colors, typography, and shapes for complete brand control:
@Composable
fun MFASettingsScreen() {
AuthenticatorSettingsComponent(
themeConfiguration = Auth0ThemeConfiguration(
color = Auth0Color.light().copy(
backgroundPrimary = Color(0xFF0066CC),
textOnPrimary = Color.White,
backgroundLayerBase = Color(0xFFF5F5F5),
backgroundLayerMedium = Color.White,
textBold = Color(0xFF1F1F1F),
textDefault = Color(0xFF636363),
backgroundError = Color(0xFFFF4444),
backgroundSuccess = Color(0xFF00CC66),
borderDefault = Color(0xFFE0E0E0)
),
typography = Auth0Typography.default().copy(
displayMedium = TextStyle(
fontSize = 22.sp,
fontWeight = FontWeight.Bold
),
body = TextStyle(
fontSize = 18.sp
)
),
shapes = Auth0Shapes(
none = RoundedCornerShape(0.dp),
extraSmall = RoundedCornerShape(4.dp),
small = RoundedCornerShape(8.dp),
medium = RoundedCornerShape(12.dp),
large = RoundedCornerShape(16.dp),
extraLarge = RoundedCornerShape(24.dp),
full = RoundedCornerShape(100.dp)
)
)
)
}Use Auth0Theme.colors, Auth0Theme.typography, Auth0Theme.shapes, Auth0Theme.dimensions, and Auth0Theme.sizes to read theme tokens inside any composable wrapped by Auth0Theme:
@Composable
fun CustomAuthCard() {
Card(
shape = Auth0Theme.shapes.medium,
colors = CardDefaults.cardColors(
containerColor = Auth0Theme.colors.backgroundLayerMedium
)
) {
Column(modifier = Modifier.padding(Auth0Theme.dimensions.spacingMd)) {
Text(
text = "Authenticator",
style = Auth0Theme.typography.title,
color = Auth0Theme.colors.textBold
)
Text(
text = "Enabled",
style = Auth0Theme.typography.bodySmall,
color = Auth0Theme.colors.textDefault
)
}
}
}Wrap custom composables with Auth0Theme to provide theme tokens without using AuthenticatorSettingsComponent:
@Composable
fun BrandedScreen() {
Auth0Theme(
configuration = Auth0ThemeConfiguration(
color = Auth0Color.light().copy(
backgroundPrimary = Color(0xFFFF6B00)
)
)
) {
// All descendants can access Auth0Theme.colors, Auth0Theme.typography, etc.
CustomAuthCard()
}
}Hold the theme configuration in state to switch themes at runtime:
@Composable
fun MFASettingsScreen() {
var isDarkMode by remember { mutableStateOf(false) }
val themeConfig = Auth0ThemeConfiguration(
color = if (isDarkMode) Auth0Color.dark() else Auth0Color.light()
)
Column {
Switch(
checked = isDarkMode,
onCheckedChange = { isDarkMode = it }
)
AuthenticatorSettingsComponent(themeConfiguration = themeConfig)
}
}For issues and questions: