แม้ว่า Credential Manager จะรองรับการลงชื่อเข้าใช้ด้วยรหัสผ่าน แต่เราขอแนะนำอย่างยิ่งให้ จัดลำดับความสำคัญของวิธีการตรวจสอบสิทธิ์แบบใหม่ที่ปลอดภัยกว่า เช่น พาสคีย์และ ลงชื่อเข้าใช้ด้วย Google ซึ่งจะช่วยเพิ่มความปลอดภัยและมอบประสบการณ์การใช้งานที่ดีขึ้นอย่างมาก อย่างไรก็ตาม หากแอปพลิเคชันของคุณต้องรองรับรหัสผ่าน ให้ใช้คำแนะนำนี้ เป็นข้อมูลอ้างอิงในการติดตั้งใช้งานรหัสผ่านด้วย Credential Manager
Credential Manager มี API แบบรวมสำหรับแอปของคุณเพื่อบันทึกและเรียกข้อมูลเข้าสู่ระบบของผู้ใช้ ซึ่งรวมถึงชื่อผู้ใช้และรหัสผ่าน ซึ่งช่วยลดความซับซ้อนของกระบวนการลงชื่อเข้าใช้สำหรับผู้ใช้ และช่วยให้ผู้ใช้ใช้ผู้ให้บริการข้อมูลเข้าสู่ระบบได้อย่างราบรื่น
สิ่งที่ต้องมีก่อน
การติดตั้งใช้งานรหัสผ่านของ Credential Manager จะทำงานในอุปกรณ์ที่ใช้ Android 4.4 (ระดับ API 19) ขึ้นไป
ภาพรวม
คู่มือนี้มุ่งเน้นการเปลี่ยนแปลงที่จำเป็นในแอปเพื่อสร้าง บันทึก และลงชื่อเข้าใช้ด้วยรหัสผ่าน
- เพิ่มทรัพยากร Dependency ลงในแอป: เพิ่มไลบรารี Credential Manager ที่จำเป็น
- สร้างอินสแตนซ์ของ Credential Manager: สร้างอินสแตนซ์ของ Credential Manager
- บันทึกรหัสผ่านของผู้ใช้: จัดเก็บข้อมูลเข้าสู่ระบบของผู้ใช้อย่างปลอดภัย
- ลงชื่อเข้าใช้ด้วยรหัสผ่าน: ดึงและใช้ข้อมูลเข้าสู่ระบบที่จัดเก็บไว้เพื่อเข้าสู่ระบบ
- ระบุช่องที่ควรใช้การป้อนข้อความอัตโนมัติ: ใช้การป้อนข้อความอัตโนมัติเพื่อประสบการณ์ของผู้ใช้ที่ดียิ่งขึ้น
- เพิ่มการรองรับลิงก์เนื้อหาดิจิทัล: เพิ่มการรองรับเพื่อแชร์รหัสผ่าน ในแอปและเว็บไซต์ที่ลิงก์
เพิ่มการอ้างอิงไปยังแอป
เพิ่มทรัพยากร 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.
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)
}
}
}
ลงชื่อเข้าใช้ด้วยรหัสผ่าน
หากต้องการดึงข้อมูลเข้าสู่ระบบที่บันทึกไว้ ให้สร้าง 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 ระหว่างแอปกับเว็บไซต์ ซึ่งจะช่วยให้แชร์ข้อมูลเข้าสู่ระบบได้อย่างปลอดภัยในทั้ง 2 แพลตฟอร์ม