שילוב של 'מנהל פרטי הכניסה' עם המילוי האוטומטי

החל מ-Android 15 Beta 2, בשילוב עם androidx.credentials:1.5.0-alpha01, מפתחים יכולים לקשר תצוגות ספציפיות כמו שדות של שם משתמש או סיסמה עם בקשות של מנהל פרטי הכניסה. כשהמשתמש מתמקד באחת מהתצוגות האלה, הבקשה המתאימה נשלחת למנהל האישורים. האישורים שמתקבלים מצטברים אצל הספקים ומוצגים בממשקי משתמש של מילוי אוטומטי, כמו הצעות מוטבעות במקלדת או הצעות בתפריט נפתח. אפשר להשתמש בתכונה הזו כפתרון חלופי אם המשתמשים סוגרים בטעות את בורר החשבונות של מנהל פרטי הכניסה ואז מקישים על השדות הרלוונטיים.

הספרייה Jetpack androidx.credentials היא נקודת הקצה המומלצת למפתחים לשימוש בתכונה הזו.

איור שבו מוצגים פרטי כניסה בתוצאות של מילוי אוטומטי
איור 1: תוצאות של מילוי אוטומטי עם פרטי כניסה באמצעות סיסמה, מפתח גישה וכניסה באמצעות חשבון Google.

הטמעה

כדי להשתמש במנהל פרטי הכניסה כדי להציג פרטי כניסה בתוצאות של מילוי אוטומטי, צריך להשתמש בהטמעה רגילה כדי ליצור GetCredentialRequest ואז להגדיר אותו לתצוגות הרלוונטיות. הטיפול בתגובה זהה, בין אם התגובה מגיעה מקריאת ה-API‏ getCredential או מה-API‏ PendingGetCredentialRequest, כמו שמוצג בדוגמה הבאה.

קודם כל, יוצרים GetCredentialRequest:

// Retrieves the user's saved password for your app.
val getPasswordOption = GetPasswordOption()

// Get a passkey from the user's public key credential provider.
val getPublicKeyCredentialOption = GetPublicKeyCredentialOption(
  requestJson = requestJson
)

val getCredRequest = GetCredentialRequest(
  listOf(getPasswordOption, getPublicKeyCredentialOption)
)

לאחר מכן, שולחים קריאה ל-API של getCredential. יוצג בורר של מנהל האישורים.

coroutineScope {
  try {
    val result = credentialManager.getCredential(
      context = activityContext, // Use an activity-based context.
      request = getCredRequest
    )
    handleSignIn(result);
  } catch (e: GetCredentialException) {
    handleFailure(e);
  }
}

לבסוף, מפעילים את חוויית המילוי האוטומטי. מגדירים את getCredRequest לתצוגות רלוונטיות (כמו username, password) כדי לאפשר הצגת תוצאות של פרטי כניסה בהשלמה אוטומטית כשהמשתמש מקיים אינטראקציה עם התצוגות האלה.

usernameEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
  getCredRequest) { response -> handleSignIn(response)
}

passwordEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
  getCredRequest) { response -> handleSignIn(response)
}