雖然 Credential Manager 支援以密碼登入,但我們強烈建議優先採用更安全的新式驗證方法,例如密碼金鑰和使用 Google 帳戶登入。這些方法可大幅提升安全性及使用者體驗。不過,如果應用程式必須支援密碼,請參考本指南,透過 Credential Manager 實作密碼功能。
Credential Manager 提供統一的 API,供應用程式儲存及擷取使用者憑證,包括使用者名稱和密碼。這可簡化使用者的登入程序,讓他們順暢使用憑證供應商。
必要條件
搭載 Android 4.4 (API 級別 19) 以上版本的裝置,都支援 Credential Manager 的密碼實作方式。
總覽
本指南著重於應用程式中建立、儲存及登入密碼所需的變更。
- 為應用程式新增依附元件:新增必要的 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
使用應用程式或活動情境建立 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。這樣一來,就能在兩個平台之間安全地共用憑證。