虽然 Credential Manager 支持基于密码的登录,但我们强烈建议优先考虑更安全的新型身份验证方法,例如通行密钥和使用 Google 账号登录。这些方法可显著提升安全性和用户体验。不过,如果您的应用必须支持密码,请参考本指南,了解如何使用 Credential Manager 实现密码功能。
Credential Manager 提供了一个统一的 API,供您的应用保存和检索用户凭据,包括用户名和密码。这可简化用户的登录流程,并允许用户无缝使用凭据提供程序。
前提条件
Credential Manager 的密码实现适用于搭载 Android 4.4(API 级别 19)及更高版本的设备。
概览
本指南重点介绍在应用中创建、保存密码并使用密码登录所需的更改。
- 为应用添加依赖项:添加所需的 Credential Manager 库。
- 实例化 Credential Manager:创建 Credential Manager 实例。
- 保存用户密码:安全地存储用户凭据。
- 使用密码登录:检索并使用存储的凭据进行登录。
- 确定应使用自动填充功能的字段:使用自动填充功能可改善用户体验。
- 添加对 Digital Asset Links 的支持:添加对在关联的应用和网站之间共享密码的支持。
为应用添加依赖项
将以下依赖项添加到应用模块的 build.gradle 文件中:
Kotlin
dependencies { implementation("androidx.credentials:credentials:1.7.0-alpha02") }
Groovy
dependencies { implementation "androidx.credentials:credentials:1.7.0-alpha02" }
实例化 Credential Manager
使用应用或 activity 上下文创建 CredentialManager 对象。
// Use your app or activity context to instantiate a client instance of
// CredentialManager.
private val credentialManager = CredentialManager.create(context)
保存用户密码
当用户在您的应用中成功注册或更新密码时,请将这些凭据保存到其密码管理器中。
构建密码请求:
CreatePasswordRequest对象包含要保存的用户名和密码。调用credentialManager.createCredential()以启动保存流程。处理响应:处理
CreatePasswordResponse并管理所有错误(例如,如果用户取消请求)。
suspend fun registerPassword(username: String, password: String) {
// Initialize a CreatePasswordRequest object.
val createPasswordRequest =
CreatePasswordRequest(id = username, password = password)
// Create credential and handle result.
coroutineScope {
try {
val result =
credentialManager.createCredential(
// Use an activity based context to avoid undefined
// system UI launching behavior.
activityContext,
createPasswordRequest
)
// Handle register password result
} catch (e: CreateCredentialException) {
handleFailure(e)
}
}
}
使用密码登录
如需检索已保存的凭据,请使用 GetPasswordOption 构建 GetCredentialRequest,然后调用 getCredential()。如需根据指定的用户 ID 过滤要提取的密码,请使用可选字段 allowedUserIds。
val getPasswordOption = GetPasswordOption()
val credentialRequest = GetCredentialRequest.Builder()
.addCredentialOption(getPasswordOption)
.build()
确定应使用自动填充功能的字段
android:isCredential 属性有助于凭据提供程序识别旨在用于自动填充的字段,从而带来更流畅的用户体验。此属性可补充现有的 autofillHints。
指明某些字段旨在用于自动填充的优势包括:
- 提高了自动填充的准确性:有助于密码管理工具和 Android 系统更好地识别用于输入凭据的字段。
- 增强用户体验:可提供更顺畅、更可靠的自动填充建议。
在用户名和密码字段中添加 isCredential 属性,如以下示例所示:
<EditText
android:id="@+id/username_edittext"
android:autofillHints="username"
android:isCredential="true" />
<EditText
android:id="@+id/password_edittext"
android:inputType="textPassword"
android:autofillHints="password"
android:isCredential="true" />
或者,也可以以编程方式添加该属性,如以下代码段所示:
if (android.os.Build.VERSION.SDK_INT >=
android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { // Android 14
usernameEditText.isCredential = true
passwordEditText.isCredential = true
}
添加对 Digital Asset Links 的支持
为确保与密码管理工具兼容,您必须在应用与网站之间配置 Digital Asset Links。这样,凭据就可以在两个平台之间安全地共享。