Google Sign-In using Credential Manager provides secure, passwordless authentication with a modern API that works across devices and accounts.
Dependency Setup
implementation("androidx.credentials:credentials:1.2.0")
implementation("com.google.android.gms:play-services-auth:20.7.0")
Initialize Credential Manager
import androidx.credentials.CredentialManager
import com.google.android.gms.auth.api.signin.GoogleIdTokenCredential
import androidx.credentials.GetSignInWithGoogleOption
val credentialManager = CredentialManager.create(context)
val googleIdOption = GetSignInWithGoogleOption.Builder(
serverClientId = "YOUR_SERVER_CLIENT_ID"
).build()
Request Sign-In
launchSignIn(credentialManager, googleIdOption) { idToken ->
verifyTokenWithFirebase(idToken)
}
private fun launchSignIn(
credentialManager: CredentialManager,
googleIdOption: GetSignInWithGoogleOption,
onSuccess: (String) -> Unit
) {
viewModelScope.launch {
try {
val result = credentialManager.getCredential(
context = context,
request = GetCredentialRequest(listOf(googleIdOption))
)
val idToken = (result.credential as? GoogleIdTokenCredential)
?.idToken ?: return@launch
onSuccess(idToken)
} catch (e: Exception) {
handleSignInError(e)
}
}
}
Firebase Integration
private fun verifyTokenWithFirebase(idToken: String) {
val credential = GoogleAuthProvider.getCredential(idToken, null)
Firebase.auth.signInWithCredential(credential)
.addOnCompleteListener { task ->
if (task.isSuccessful) {
val user = Firebase.auth.currentUser
navigateToHome(user)
}
}
}
Credential Manager handles account selection automatically on devices with multiple accounts. It's the recommended approach replacing legacy GoogleSignInClient.
8 Android app templates (Habit Tracker, Budget Manager, Task Manager, and more) available on Gumroad
Top comments (0)