Credential Manager 凭据管理器
源:凭据管理器概览
Credential Manager 是 Android 的一个新库,旨在统一应用的登录体验。它支持多种身份认证方式,包括通行密钥 (Passkeys)、密码和第三方登录(如 Google 登录)。
1. 核心功能
- 通行密钥 (Passkeys): 目前最安全的身份认证方式,利用指纹或面容替代密码。
- 统一界面: 自动为用户弹出单一、整洁的底板进行选择。
- 向后兼容: 替代了旧版的 Google Sign-In 和 Smart Lock。
2. 添加依赖
kotlin
[versions]
credential = "1.2.2"
googleid = "1.1.0"
[libraries]
androidx-credentials = { group = "androidx.credentials", name = "credential", version.ref = "credential" }
# 可选:Google 登录支持
google-identity-googleid = { group = "com.google.android.libraries.identity.googleid", name = "googleid", version.ref = "googleid" }kotlin
dependencies {
implementation(libs.androidx.credentials)
// 可选:Google 登录支持
implementation(libs.google.identity.googleid)
}3. 请求登录 (Get Credentials)
第一步:创建请求
kotlin
val credentialManager = CredentialManager.create(context)
// 1. 请求通行密钥
val getPasskeyOption = GetPasskeyOption()
// 2. 请求密码
val getPasswordOption = GetPasswordOption()
val getCredRequest = GetCredentialRequest(
listOf(getPasskeyOption, getPasswordOption)
)第二步:发起调用
kotlin
lifecycleScope.launch {
try {
val result = credentialManager.getCredential(
context = this@MainActivity,
request = getCredRequest
)
handleSignIn(result)
} catch (e: GetCredentialException) {
// 处理用户取消或错误
}
}第三步:处理结果
kotlin
private fun handleSignIn(result: GetCredentialResponse) {
when (val credential = result.credential) {
is PasswordCredential -> {
val id = credential.id
val password = credential.password
// 使用传统密码登录
}
is PublicKeyCredential -> {
val jsonResponse = credential.authenticationResponseJson
// 发送到服务器验证通行密钥
}
}
}4. 创建通行密钥 (Create Passkey)
当用户成功注册后,你可以引导他们创建通行密钥以便下次免密登录。
kotlin
val createRequest = CreatePublicKeyCredentialRequest(
requestJson = "从服务器获取的配置 JSON"
)
lifecycleScope.launch {
try {
credentialManager.createCredential(context, createRequest)
// 创建成功
} catch (e: CreateCredentialException) {
// 处理错误
}
}5. 最佳实践
- 平滑迁移: 即使你的应用目前不支持 Passkeys,也可以先集成此库来统一处理密码和 Google 登录。
- UI 触发: 建议在登录界面的“继续”按钮或自动对焦输入框时触发
getCredential。