Skip to main content

Android SDK

The ThunderID Android SDK provides two libraries for integrating authentication into your Android applications:

  • dev.thunderid:android: Core authentication client with the full IAM API surface
  • dev.thunderid:compose: Drop-in Jetpack Compose components built on top of dev.thunderid:android

Both libraries require a minimum SDK version of API 24 (Android 7.0).

Installation​

dependencies {
implementation("dev.thunderid:compose:0.1.0") // includes :android automatically
}

Add the ThunderID Maven repository to your settings.gradle.kts:

dependencyResolutionManagement {
repositories {
maven("https://maven.thunderid.dev/releases")
}
}

Getting Started​

To get started quickly, follow the Android Quickstart Guide for step-by-step setup instructions.

Quick Example​

import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.MaterialTheme
import dev.thunderid.android.ThunderIDConfig
import dev.thunderid.compose.LocalThunderID
import dev.thunderid.compose.ThunderIDProvider
import dev.thunderid.compose.components.actions.SignOutButton
import dev.thunderid.compose.components.guards.SignedIn
import dev.thunderid.compose.components.presentation.auth.SignIn

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MaterialTheme {
ThunderIDProvider(
config = ThunderIDConfig(
baseUrl = "https://localhost:8090",
clientId = "<your-client-id>",
scopes = listOf("openid", "profile", "email"),
afterSignInUrl = "dev.thunderid.quickstart://callback",
afterSignOutUrl = "dev.thunderid.quickstart://logout",
applicationId = "<your-application-id>"
)
) {
ContentView()
}
}
}
}
}

@Composable
fun ContentView() {
val thunder = LocalThunderID.current
SignedIn {
Column {
Text("Welcome, ${thunder.user?.displayName ?: ""}!")
SignOutButton()
}
}
}

Features​

dev.thunderid:android: Core Client​

MethodDescription
initialize(config, storage)Initialize the SDK with configuration and an optional storage backend
signIn(payload, request)App-native sign-in via the Flow Execution API
signUp(payload, request)App-native registration via the Flow Execution API
buildSignInUrl(options)Build an OAuth 2.0 authorization URL for redirect-based sign-in
handleRedirectCallback(url)Exchange an authorization code for tokens after redirect
getAccessToken()Retrieve the current access token, refreshing automatically if needed
getUser()Retrieve the authenticated user from the JWT or /oauth2/userinfo
getUserProfile()Fetch the full user profile from /scim2/Me
updateUserProfile(payload, userId)Update the user's profile
signOut(options)Revoke the refresh token and clear the session
exchangeToken(config)Perform an OAuth 2.0 token exchange (STS)
decodeJwtToken(token)Decode a JWT string into a Map<String, Any?>

dev.thunderid:compose: Components​

Actions​

ComponentDescription
SignInButton(onClick)Pre-styled button that triggers your sign-in flow
BaseSignInButton(label, isLoading, modifier, onClick)Unstyled button for custom UI
SignOutButton(modifier)Calls signOut() and refreshes auth state
BaseSignOutButton(label, isLoading, modifier, onClick)Unstyled button for custom UI
SignUpButton(onClick)Pre-styled button that triggers your registration flow

Presentation​

ComponentDescription
SignIn(applicationId, modifier, onComplete, onError)Full embedded sign-in form driven by the Flow Execution API
BaseSignIn(applicationId, onComplete, onError, content)Builder variant; receives a SignInState for custom form UI
SignUp(modifier, onComplete, onError)Full embedded registration form
BaseSignUp(onComplete, onError, content)Builder variant for custom registration UI
UserProfile(modifier, onSaved, onError)Editable profile form; loads from /scim2/Me and saves via updateUserProfile
BaseUserProfile(onSaved, onError, content)Builder variant with full control over the form layout

Guards​

ComponentDescription
SignedIn(fallback, content)Renders content only when the user is authenticated
SignedOut(fallback, content)Renders content only when the user is not authenticated

State​

TypeDescription
ThunderIDStateReactive state class provided via LocalThunderID
LocalThunderIDCompositionLocal<ThunderIDState>, read with LocalThunderID.current

Customization​

The ThunderID Android SDK gives you full control over your application's authentication experience:

  • Use SignIn and SignUp for pre-built forms, or BaseSignIn and BaseSignUp to render your own UI with the same Flow Execution loop
  • Swap in BaseSignInButton and BaseSignOutButton to match your design system without touching any auth logic
  • Provide a custom StorageAdapter to control where tokens are persisted (default: EncryptedStorageAdapter using Android Keystore AES-256-GCM)
  • Override localized strings using ThunderIDI18n with your own translation bundles

Explore with AI

ThunderID LogoThunderID Logo

Product

DocsAPIsSDKs
© Copyright Linux Foundation Europe.For web site terms of use, trademark policy and other project policies please see https://linuxfoundation.eu/en/policies.