แม้ว่า Credential Manager จะรองรับการลงชื่อเข้าใช้ด้วยรหัสผ่าน แต่เราขอแนะนำอย่างยิ่งให้จัดลำดับความสำคัญของวิธีการตรวจสอบสิทธิ์แบบใหม่ที่ปลอดภัยกว่า เช่น พาสคีย์ และ การลงชื่อเข้าใช้ด้วย Google เนื่องจากวิธีการเหล่านี้มีความปลอดภัยและประสบการณ์ของผู้ใช้ที่ดีกว่าอย่างเห็นได้ชัด อย่างไรก็ตาม หากแอปพลิเคชันของคุณต้องรองรับรหัสผ่าน ให้ใช้คู่มือนี้เป็นข้อมูลอ้างอิงเพื่อใช้รหัสผ่านกับ Credential Manager
Credential Manager มี API แบบรวมเพื่อให้แอปบันทึกและดึงข้อมูลเข้าสู่ระบบของผู้ใช้ รวมถึงชื่อผู้ใช้และรหัสผ่าน ซึ่งจะช่วยลดความซับซ้อนของกระบวนการลงชื่อเข้าใช้สำหรับผู้ใช้และช่วยให้ผู้ใช้ใช้ผู้ให้บริการข้อมูลเข้าสู่ระบบได้อย่างราบรื่น
สิ่งที่ต้องมีก่อน
การใช้รหัสผ่านของ Credential Manager ทำงานในอุปกรณ์ที่ใช้ Android 4.4 (ระดับ API 19) ขึ้นไป
ภาพรวม
คู่มือนี้มุ่งเน้นไปที่การเปลี่ยนแปลงที่จำเป็นในแอปเพื่อสร้าง บันทึก และลงชื่อเข้าใช้ด้วยรหัสผ่าน
- เพิ่มทรัพยากร Dependency ลงในแอป: เพิ่มไลบรารี Credential Manager ที่จำเป็น
- สร้างอินสแตนซ์ Credential Manager: สร้างอินสแตนซ์ Credential Manager
- บันทึกรหัสผ่านของผู้ใช้: จัดเก็บข้อมูลเข้าสู่ระบบของผู้ใช้อย่างปลอดภัย
- ลงชื่อเข้าใช้ด้วยรหัสผ่าน: ดึงและใช้ข้อมูลเข้าสู่ระบบที่จัดเก็บไว้เพื่อเข้าสู่ระบบ
- ระบุช่องที่ควรใช้การป้อนข้อความอัตโนมัติ: ใช้การป้อนข้อความอัตโนมัติเพื่อประสบการณ์ของผู้ใช้ที่ดีขึ้น
- เพิ่มการรองรับลิงก์เนื้อหาดิจิทัล (Digital Asset Links): เพิ่มการรองรับเพื่อแชร์รหัสผ่าน ในแอปและเว็บไซต์ที่ลิงก์
เพิ่มทรัพยากร Dependency ลงในแอป
เพิ่มทรัพยากร Dependency ต่อไปนี้ลงในไฟล์ 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.
// Use an activity-based context to avoid undefined system UI
// launching behavior.
val context = MutableContextWrapper(activityContext)
coroutineScope {
try {
val result =
credentialManager.createCredential(
// Use MutableContextWrapper to avoid memory leak during configuration changes
context = context,
createPasswordRequest
)
// Handle register password result
} catch (e: CreateCredentialException) {
handleFailure(e)
}
}
}
ลงชื่อเข้าใช้ด้วยรหัสผ่าน
หากต้องการดึงข้อมูลเข้าสู่ระบบที่บันทึกไว้ ให้สร้าง GetCredentialRequest ด้วย
GetPasswordOption แล้วเรียก getCredential() หากต้องการกรองรหัสผ่านที่จะดึงข้อมูลตามรหัสผู้ใช้ที่ระบุ ให้ใช้ช่องที่ไม่บังคับ
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 ระหว่างแอปกับเว็บไซต์เพื่อให้แน่ใจว่าแอปจะเข้ากันได้กับเครื่องมือจัดการรหัสผ่าน ซึ่งจะช่วยให้แชร์ข้อมูลเข้าสู่ระบบได้อย่างปลอดภัยในทั้ง 2 แพลตฟอร์ม