เมื่อผู้ใช้สร้างพาสคีย์ เซิร์ฟเวอร์ของบุคคลที่สามจะบันทึกรายละเอียดบางอย่าง ส่วนผู้ให้บริการข้อมูลเข้าสู่ระบบ เช่น เครื่องมือจัดการรหัสผ่านบน Google จะบันทึกรายละเอียดอื่นๆ ดังนี้
- เซิร์ฟเวอร์ของบุคคลที่สามจะบันทึกข้อมูลเข้าสู่ระบบคีย์สาธารณะ
- ผู้ให้บริการข้อมูลเข้าสู่ระบบจะบันทึกชื่อผู้ใช้ ชื่อที่แสดง คีย์ส่วนตัว และข้อมูลเมตาอื่นๆ ที่เกี่ยวข้อง ข้อมูลเมตานี้ช่วยให้ผู้ใช้ระบุและเลือก พาสคีย์ที่จำเป็นในระหว่างการลงชื่อเข้าใช้ได้
ความไม่สอดคล้องที่อาจเกิดขึ้นระหว่างข้อมูลที่บันทึกไว้ในเซิร์ฟเวอร์ของบุคคลที่สามและผู้ให้บริการข้อมูลเข้าสู่ระบบอาจส่งผลให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดี ปัญหาอาจเกิดขึ้นในสถานการณ์ต่อไปนี้
- ระบบจะลบข้อมูลเข้าสู่ระบบในเซิร์ฟเวอร์ของบุคคลที่สามที่เชื่อถือได้ แต่ไม่ได้ลบใน ผู้ให้บริการข้อมูลเข้าสู่ระบบ ซึ่งส่งผลให้ผู้ให้บริการข้อมูลเข้าสู่ระบบแสดง ข้อมูลเข้าสู่ระบบที่ลบแล้วต่อผู้ใช้
- ชื่อผู้ใช้หรือชื่อที่แสดงได้รับการอัปเดตในเซิร์ฟเวอร์ของบุคคลที่สาม แต่ไม่ได้อัปเดตในผู้ให้บริการข้อมูลเข้าสู่ระบบ ซึ่งส่งผลให้ผู้ให้บริการข้อมูลเข้าสู่ระบบแสดงรายละเอียดที่ล้าสมัย
Signal API ของเครื่องมือจัดการข้อมูลเข้าสู่ระบบช่วยให้ผู้ให้บริการที่เชื่อถือได้สื่อสารกับ ผู้ให้บริการข้อมูลเข้าสู่ระบบเพื่อลบข้อมูลเข้าสู่ระบบและอัปเดตข้อมูลเมตาของผู้ใช้ เช่น ชื่อผู้ใช้และชื่อที่แสดง คำขอที่รองรับมี 3 ประเภทสำหรับ สถานการณ์ต่างๆ ดังนี้
SignalUnknownCredentialRequest- ระบุว่าข้อมูลเข้าสู่ระบบที่เฉพาะเจาะจงไม่มีผลอีกต่อไปและควรซ่อนหรือนำออกจากผู้ให้บริการข้อมูลเข้าสู่ระบบ
SignalAllAcceptedCredentialIdsRequest- แสดงรายการรหัสข้อมูลเข้าสู่ระบบที่ยอมรับต่อผู้ให้บริการข้อมูลเข้าสู่ระบบ
SignalCurrentUserDetailsRequest- อัปเดตรายละเอียดข้อมูลเมตาของผู้ใช้
ความเข้ากันได้ของเวอร์ชัน
Signal API พร้อมให้บริการในอุปกรณ์ที่ใช้ Android 15 ขึ้นไป และพร้อมให้บริการตั้งแต่เวอร์ชัน 1.6.0-beta03 ของไลบรารี androidx.credentials
การใช้งาน
หากต้องการใช้ Signal API ให้ทำตามขั้นตอนต่อไปนี้
เพิ่มทรัพยากร Dependency ของเครื่องมือจัดการข้อมูลเข้าสู่ระบบลงในโปรเจ็กต์
Kotlin
dependencies { implementation("androidx.credentials:credentials:1.6.0-rc01") }
Groovy
dependencies { implementation "androidx.credentials:credentials:1.6.0-rc01" }
เรียกใช้ Signal API
หากต้องการส่งคำขอสัญญาณไปยังผู้ให้บริการข้อมูลเข้าสู่ระบบ ให้ใช้คำขอสัญญาณที่รองรับ คำขอ JSON จำเป็นสำหรับคำขอสัญญาณแต่ละประเภท ดังที่แสดง ในตัวอย่างต่อไปนี้
ข้อมูลเข้าสู่ระบบที่ไม่รู้จัก (
SignalUnknownCredentialRequest)ใช้
SignalUnknownCredentialRequestเพื่อส่งสัญญาณว่ามีการปฏิเสธข้อมูลเข้าสู่ระบบและถือว่าไม่รู้จัก เมื่อผู้ให้บริการข้อมูลเข้าสู่ระบบได้รับสัญญาณนี้ ก็จะซ่อนหรือลบข้อมูลเข้าสู่ระบบการใช้งาน
ใช้สัญญาณนี้เมื่อผู้ให้บริการไม่สามารถยืนยันการยืนยันพาสคีย์ได้ ซึ่งหมายความว่าพาสคีย์ไม่ถูกต้องและต้อง ซ่อนหรือนำออกจากผู้ให้บริการข้อมูลเข้าสู่ระบบ
พารามิเตอร์ 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เพื่อแจ้งผู้ให้บริการข้อมูลเข้าสู่ระบบ ด้วยชุดข้อมูลเข้าสู่ระบบที่ยอมรับทั้งหมด เมื่อผู้ให้บริการข้อมูลเข้าสู่ระบบได้รับสัญญาณแล้ว ผู้ให้บริการจะซ่อนหรือลบข้อมูลเข้าสู่ระบบที่ไม่ได้รวมอยู่ในรายการนี้ หรือยกเลิกการซ่อนข้อมูลเข้าสู่ระบบที่ซ่อนไว้ก่อนหน้านี้ซึ่งตอนนี้รวมอยู่ในรายการแล้วการใช้งาน
ใช้สัญญาณนี้เมื่อการยืนยันพาสคีย์ล้มเหลวโดยผู้ให้บริการ การดำเนินการไม่สำเร็จนี้หมายความว่าพาสคีย์ไม่ถูกต้องและต้องซ่อนจาก หรือนำออกโดยผู้ให้บริการข้อมูลเข้าสู่ระบบ นอกจากนี้ คุณยังใช้สัญญาณนี้ได้ทุกเมื่อที่ต้องการออกอากาศชุดรหัสข้อมูลเข้าสู่ระบบที่รู้จักไปยังผู้ให้บริการข้อมูลเข้าสู่ระบบ
พารามิเตอร์ 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เพื่อแจ้งผู้ให้บริการข้อมูลเข้าสู่ระบบ ว่ามีการอัปเดตข้อมูลเมตา เช่น ชื่อผู้ใช้และชื่อที่แสดงสำหรับผู้ใช้หนึ่งๆ และควรปรากฏในผู้ให้บริการข้อมูลเข้าสู่ระบบการใช้งาน
ใช้สัญญาณนี้เมื่อผู้ใช้หรือบุคคลที่สามที่เชื่อถือได้อัปเดตข้อมูลเมตาของพาสคีย์ ที่เชื่อมโยงกับบัญชีผู้ใช้
พารามิเตอร์ 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 Notification Channel
ในแอป ให้ทริกเกอร์โฟลว์ที่ส่งคำขอสัญญาณไปยัง ผู้ให้บริการข้อมูลเข้าสู่ระบบ คุณควรเห็นการแจ้งเตือนจาก MyVault บนหน้าจอ ซึ่งเป็นการยืนยันว่าผู้ให้บริการข้อมูลเข้าสู่ระบบได้รับคำขอแล้ว