เมื่อผู้ใช้สร้างพาสคีย์ เซิร์ฟเวอร์ของ Relying Party จะบันทึกรายละเอียดบางอย่าง ขณะที่ผู้ให้บริการข้อมูลเข้าสู่ระบบ เช่น เครื่องมือจัดการรหัสผ่านบน Google จะบันทึกรายละเอียดอื่นๆ ดังนี้
- เซิร์ฟเวอร์ของ Relying Party จะบันทึกข้อมูลเข้าสู่ระบบคีย์สาธารณะ
- ผู้ให้บริการข้อมูลเข้าสู่ระบบจะบันทึกชื่อผู้ใช้ ชื่อที่แสดง คีย์ส่วนตัว และข้อมูลเมตาอื่นๆ ที่เกี่ยวข้อง ข้อมูลเมตานี้ช่วยให้ผู้ใช้ระบุและเลือกพาสคีย์ที่ต้องการได้ในระหว่างการลงชื่อเข้าใช้
ความไม่สอดคล้องกันที่อาจเกิดขึ้นระหว่างข้อมูลที่บันทึกไว้ในเซิร์ฟเวอร์ของ Relying Party กับผู้ให้บริการข้อมูลเข้าสู่ระบบอาจทำให้ผู้ใช้ได้รับประสบการณ์ที่ไม่ดี ปัญหาอาจเกิดขึ้นในสถานการณ์ต่อไปนี้
- ข้อมูลเข้าสู่ระบบถูกลบในเซิร์ฟเวอร์ของ Relying Party แต่ไม่ได้ลบในผู้ให้บริการข้อมูลเข้าสู่ระบบ ซึ่งส่งผลให้ผู้ให้บริการข้อมูลเข้าสู่ระบบแสดงข้อมูลเข้าสู่ระบบที่ถูกลบต่อผู้ใช้
- ชื่อผู้ใช้หรือชื่อที่แสดงได้รับการอัปเดตในเซิร์ฟเวอร์ของ Relying Party แต่ไม่ได้อัปเดตในผู้ให้บริการข้อมูลเข้าสู่ระบบ ซึ่งส่งผลให้ผู้ให้บริการข้อมูลเข้าสู่ระบบแสดงรายละเอียดที่ล้าสมัย
Signal API ของ Credential Manager ช่วยให้ Relying Party สื่อสารกับผู้ให้บริการข้อมูลเข้าสู่ระบบเพื่อลบข้อมูลเข้าสู่ระบบและอัปเดตข้อมูลเมตาของผู้ใช้ เช่น ชื่อผู้ใช้และชื่อที่แสดง คำขอที่รองรับมี 3 ประเภทสำหรับสถานการณ์ต่างๆ ดังนี้
SignalUnknownCredentialRequest- ระบุว่าข้อมูลเข้าสู่ระบบที่เฉพาะเจาะจงไม่ถูกต้องอีกต่อไปและควรซ่อนหรือนำออกจากผู้ให้บริการข้อมูลเข้าสู่ระบบ
SignalAllAcceptedCredentialIdsRequest- ระบุรายการรหัสข้อมูลเข้าสู่ระบบที่ยอมรับแก่ผู้ให้บริการข้อมูลเข้าสู่ระบบ
SignalCurrentUserDetailsRequest- อัปเดตรายละเอียดข้อมูลเมตาของผู้ใช้
ความเข้ากันได้ของเวอร์ชัน
Signal API พร้อมใช้งานในอุปกรณ์ที่ใช้ Android 15 ขึ้นไป และพร้อมใช้งานตั้งแต่ไลบรารี androidx.credentials เวอร์ชัน 1.6.0-beta03 เป็นต้นไป
การใช้งาน
หากต้องการใช้ Signal API ให้ทำตามขั้นตอนต่อไปนี้
เพิ่มทรัพยากร Dependency ของ Credential Manager ลงในโปรเจ็กต์
Kotlin
dependencies { implementation("androidx.credentials:credentials:1.7.0-alpha01") }
Groovy
dependencies { implementation "androidx.credentials:credentials:1.7.0-alpha01" }
เรียกใช้ Signal API
หากต้องการส่งคำขอสัญญาณไปยังผู้ให้บริการข้อมูลเข้าสู่ระบบ ให้ใช้คำขอสัญญาณที่รองรับ คำขอสัญญาณแต่ละประเภทต้องใช้คำขอ JSON ดังที่แสดงในตัวอย่างต่อไปนี้
ข้อมูลเข้าสู่ระบบที่ไม่รู้จัก (
SignalUnknownCredentialRequest)ใช้
SignalUnknownCredentialRequestเพื่อส่งสัญญาณว่าระบบปฏิเสธข้อมูลเข้าสู่ระบบและถือว่าไม่รู้จัก เมื่อผู้ให้บริการข้อมูลเข้าสู่ระบบได้รับสัญญาณนี้ ระบบจะซ่อนหรือลบข้อมูลเข้าสู่ระบบการใช้งาน
ใช้สัญญาณนี้เมื่อ Relying Party ไม่สามารถยืนยันการยืนยันพาสคีย์ได้ ซึ่งหมายความว่าพาสคีย์ไม่ถูกต้องและผู้ให้บริการข้อมูลเข้าสู่ระบบต้องซ่อนหรือนำออก
พารามิเตอร์ JSON ที่จำเป็นสำหรับคำขอนี้คือ
rpIdและcredentialIdดูข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้าง JSON ได้ที่ ตัวเลือก signalUnknownCredentialcredentialManager.signalCredentialState( SignalUnknownCredentialRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("credentialId", credentialId /* [String] Credential ID of the credential to be hidden or deleted */) }.toString() ) )ข้อมูลเข้าสู่ระบบที่ยอมรับทั้งหมด (
SignalAllAcceptedCredentialIdsRequest)ใช้
SignalAllAcceptedCredentialIdsRequestเพื่อแจ้งให้ผู้ให้บริการข้อมูลเข้าสู่ระบบทราบชุดข้อมูลเข้าสู่ระบบที่ยอมรับทั้งหมด เมื่อผู้ให้บริการข้อมูลเข้าสู่ระบบได้รับสัญญาณแล้ว ผู้ให้บริการข้อมูลเข้าสู่ระบบจะซ่อนหรือลบข้อมูลเข้าสู่ระบบที่ไม่ได้รวมอยู่ในรายการนี้ หรือเลิกซ่อนข้อมูลเข้าสู่ระบบที่ซ่อนไว้ก่อนหน้านี้ซึ่งตอนนี้รวมอยู่ในรายการการใช้งาน
ใช้สัญญาณนี้เมื่อ Relying Party ไม่สามารถยืนยันพาสคีย์ได้ ความล้มเหลวนี้หมายความว่าพาสคีย์ไม่ถูกต้องและผู้ให้บริการข้อมูลเข้าสู่ระบบต้องซ่อนหรือนำออก นอกจากนี้ คุณยังใช้สัญญาณนี้ได้ทุกเมื่อที่ต้องการเผยแพร่ชุดรหัสข้อมูลเข้าสู่ระบบที่ทราบไปยังผู้ให้บริการข้อมูลเข้าสู่ระบบ
พารามิเตอร์ JSON ที่จำเป็นสำหรับคำขอนี้คือ
rpId,userIdและallAcceptedCredentialIdsดูข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้าง JSON ได้ที่ ตัวเลือก signalAllAcceptedCredentialcredentialManager.signalCredentialState( SignalAllAcceptedCredentialIdsRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("userId", userId /* [String] User ID of the current user */) put( "allAcceptedCredentialIds", JSONArray(credentialIdsList /* [List<String>] List of accepted Credential IDs */) ) }.toString() ) )รายละเอียดผู้ใช้ปัจจุบัน (
SignalCurrentUserDetailsRequest)ใช้
SignalCurrentUserDetailsRequestเพื่อแจ้งให้ผู้ให้บริการข้อมูลเข้าสู่ระบบทราบว่าข้อมูลเมตา เช่น ชื่อผู้ใช้และชื่อที่แสดงของผู้ใช้รายหนึ่งได้รับการอัปเดตแล้วและควรปรากฏในผู้ให้บริการข้อมูลเข้าสู่ระบบการใช้งาน
ใช้สัญญาณนี้เมื่อผู้ใช้หรือ Relying Party อัปเดตข้อมูลเมตาของพาสคีย์ที่เชื่อมโยงกับบัญชีผู้ใช้
พารามิเตอร์ JSON ที่จำเป็นสำหรับคำขอนี้คือ
rpId,userId,nameและdisplayNameดูข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้าง JSON ได้ที่ตัวเลือก signalCurrentUserDetailscredentialManager.signalCredentialState( SignalCurrentUserDetailsRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("userId", userId /* [String] User ID of the current user */) put("name", name /* [String] New Name to be updated for the current user */) put("displayName", displayName /* [String] New display name to be updated for the current user */) }.toString() ) )
ทดสอบการใช้งาน
หากต้องการทดสอบการใช้งาน Signal API ให้ทำตามขั้นตอนต่อไปนี้
ติดตั้งตัวอย่างผู้ให้บริการข้อมูลเข้าสู่ระบบที่ชื่อ MyVault
เปิดใช้ MyVault เป็นผู้ให้บริการข้อมูลเข้าสู่ระบบในการตั้งค่า > รหัสผ่าน พาสคีย์ และบัญชี > บริการที่ต้องการ
เปิดใช้การแจ้งเตือนทั้งหมดสำหรับ MyVault ในการตั้งค่า > แอป > MyVault > การแจ้งเตือน
ตรวจสอบว่าแสดงป๊อปอัปบนหน้าจอ เปิดอยู่สำหรับการแจ้งเตือนในการตั้งค่า > แอป > MyVault > การแจ้งเตือน > หมวดหมู่ > ช่องการแจ้งเตือน Signal API
ในแอป ให้ทริกเกอร์โฟลว์ที่ส่งคำขอสัญญาณไปยังผู้ให้บริการข้อมูลเข้าสู่ระบบ คุณควรเห็นการแจ้งเตือนจาก MyVault บนหน้าจอ ซึ่งจะเป็นการยืนยันว่าผู้ให้บริการข้อมูลเข้าสู่ระบบได้รับคำขอแล้ว