ตรวจสอบสิทธิ์ด้วยรหัสผ่าน

แม้ว่า 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)

บันทึกรหัสผ่านของผู้ใช้

เมื่อผู้ใช้ลงชื่อสมัครใช้หรืออัปเดตรหัสผ่านในแอปเรียบร้อยแล้ว ให้บันทึกข้อมูลเข้าสู่ระบบเหล่านี้ในเครื่องมือจัดการรหัสผ่านของผู้ใช้

  1. สร้างคำขอรหัสผ่าน: ออบเจ็กต์ CreatePasswordRequest มีชื่อผู้ใช้และ รหัสผ่านที่จะบันทึก เรียก credentialManager.createCredential() เพื่อเริ่มกระบวนการบันทึก

  2. จัดการการตอบกลับ: ประมวลผล 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 ระหว่างแอปกับเว็บไซต์เพื่อให้แน่ใจว่าแอปจะเข้ากันได้กับเครื่องมือจัดการรหัสผ่าน ซึ่งจะช่วยให้แชร์ข้อมูลเข้าสู่ระบบได้อย่างปลอดภัยในทั้ง 2 แพลตฟอร์ม