Credential Manager – Holder API מאפשר לאפליקציות ל-Android לנהל פרטי כניסה דיגיטליים ולהציג אותם למאמתים.
שנתחיל?
כדי להשתמש ב-Credential Manager – Holder API, מוסיפים את יחסי התלות הבאים לסקריפט ה-build של מודול האפליקציה:
// In your app module's build.gradle:
dependencies {
implementation(libs.androidx.registry.provider)
implementation(libs.androidx.registry.provider.play.services)
}
// In libs.versions.toml:
registryDigitalCredentials = "1.0.0-alpha01"
androidx-registry-provider = { module = "androidx.credentials.registry:registry-provider", version.ref = "registryDigitalCredentials" }
androidx-registry-provider-play-services = { module = "androidx.credentials.registry:registry-provider-play-services", version.ref = "registryDigitalCredentials" }
רישום פרטי כניסה ב-Credential Manager
הארנק צריך לרשום את המטא-נתונים של פרטי הכניסה כדי ש-Credential Manager יוכל לסנן אותם ולהציג אותם בבורר פרטי הכניסה כשמגיעה בקשה.

ממשק המשתמש של הבורר ב-Credential Manager
הפורמט של המטא-נתונים האלה מועבר ל-RegisterCredentialsRequest
.
יוצרים [RegistryManager][1]
ומרשמים את פרטי הכניסה:
בדוגמה הזו, המטא-נתונים נוצרים ממסד נתונים של רשומות פרטי כניסה. בארנק לדוגמה שלנו מוסבר איך רושמים את המטא-נתונים בזמן טעינת האפליקציה. בעתיד, Jetpack API יתמוך בהרכבת מסדי נתונים של פרטי כניסה. בשלב הזה תוכלו לרשום את המטא-נתונים של פרטי הכניסה כמבני נתונים מוגדרים היטב.
הרישום נשמר גם אחרי הפעלות מחדש של המכשיר. רישום מחדש של אותו רשם עם אותו מזהה וסוג יחליף את רשומת הרישום הקודמת. לכן, צריך להירשם מחדש רק אם פרטי הכניסה השתנו.
אופציונלי: יצירת מתאם
Credential Manager הוא פרוטוקול אגוניסטי. הוא מתייחס למרשם המטא-נתונים כ-blob אטום ולא מאמת או בודק את התוכן שלו. לכן, הארנק צריך לספק מתאמת, קובץ בינארי שניתן להריץ שיכול לעבד את הנתונים של הארנק וליצור את המטא-נתונים המוצגים על סמך בקשה נכנסת. מנהל פרטי הכניסה מריץ את המתאמים בסביבת חול ללא גישה לרשת או לדיסק, כדי שלא תהיה דליפה לארנק לפני ש-UI ייגרם למשתמש.
ממשק ה-API של Credential Manager יספק תואמים לפרוטוקולים פופולריים, ביניהם OpenID4VP. הוא עדיין לא פורסם באופן רשמי, לכן בינתיים אפשר להשתמש במתבצע ההתאמה לדוגמה שלנו לפרוטוקול OpenID4VP v24.
טיפול בפרטי הכניסה שנבחרו
בשלב הבא, הארנק צריך לטפל באירוע שבו המשתמש בוחר פרטי כניסה. אפשר להגדיר פעילות שמאזינה למסנן ה-Intent androidx.credentials.registry.provider.action.GET_CREDENTIAL
.
בדוגמה לארנק מוסבר איך עושים את זה.
ה-Intent שמפעיל את הפעילות יכיל את הבקשה של המאמת ואת מקור הקריאה, שאפשר לחלץ באמצעות הפונקציה PendingIntentHandler.retrieveProviderGetCredentialRequest
. ה-API מחזיר ProviderGetCredentialRequest
שמכיל את כל המידע שמשויך לבקשת המאמת הנתונה. יש שלושה רכיבים עיקריים:
- האפליקציה ששלחה את הבקשה. אפשר לאחזר את המידע הזה באמצעות
getCallingAppInfo
. - פרטי הכניסה שנבחרו. אפשר לקבל מידע על המועמד שהמשתמש בחר באמצעות שיטת התוסף
selectedEntryId
. המועמד הזה יתאים למזהה פרטי הכניסה שרשמת. - בקשות ספציפיות שהגורם המאמת ביקש. אפשר לקבל את זה מהשיטה
getCredentialOptions
. במקרה כזה, אמורה להופיע ברשימה הזו האפשרותGetDigitalCredentialOption
, שמכילה את הבקשה לפרטי הכניסה הדיגיטליים.
בדרך כלל, המאמת יבצע בקשה להצגה של פרטי כניסה דיגיטליים, כך שתוכלו לעבד אותה באמצעות הקוד לדוגמה הבא:
request.credentialOptions.forEach { option ->
if (option is GetDigitalCredentialOption) {
Log.i(TAG, "Got DC request: ${option.requestJson}")
processRequest(option.requestJson)
}
}
דוגמה לכך מופיעה בארנק לדוגמה.
עיבוד (רנדר) של ממשק המשתמש של Wallet
אחרי שבוחרים את פרטי הכניסה, הארנק מופעל והמשתמש מועבר לממשק המשתמש שלו. בדוגמה הזו, זוהי הנחיה ביומטרית.
החזרת התשובה של פרטי הכניסה
כשהארנק מוכן לשלוח את התוצאה, אפשר לעשות זאת על ידי סיום הפעילות עם התשובה של פרטי הכניסה:
PendingIntentHandler.setGetCredentialResponse(
resultData,
GetCredentialResponse(DigitalCredential(response.responseJson))
)
setResult(RESULT_OK, resultData)
finish()
אם יש חריגה, אפשר לשלוח את חריגת פרטי הכניסה באופן דומה:
PendingIntentHandler.setGetCredentialException(
resultData,
GetCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()
באפליקציית הדוגמה אפשר לראות דוגמה לאופן שבו מחזירים את התגובה של פרטי הכניסה בהקשר.