אימות באמצעות סיסמאות

למרות ש-Credential Manager תומך בכניסה באמצעות סיסמה, מומלץ מאוד לתת עדיפות לשיטות אימות מודרניות ומאובטחות יותר כמו מפתחות גישה וכניסה באמצעות חשבון Google. השיטות האלה מספקות אבטחה טובה יותר וחוויית משתמש משופרת. עם זאת, אם האפליקציה שלכם צריכה לתמוך בסיסמאות, תוכלו להיעזר במדריך הזה כדי להטמיע סיסמאות באמצעות Credential Manager.

Credential Manager מספק API מאוחד לאפליקציה שלכם כדי לשמור ולאחזר פרטי כניסה של משתמשים, כולל שמות משתמש וסיסמאות. כך תהליך הכניסה לחשבון פשוט יותר למשתמשים, והם יכולים להשתמש בספקי פרטי הכניסה בצורה חלקה.

דרישות מוקדמות

הטמעה של סיסמאות ב-Credential Manager פועלת במכשירים עם Android מגרסה 4.4 (רמת API‏ 19) ואילך.

סקירה כללית

המדריך הזה מתמקד בשינויים שצריך לבצע באפליקציה כדי ליצור סיסמה, לשמור אותה ולהיכנס באמצעותה.

  • מוסיפים תלויות לאפליקציה: מוסיפים את הספריות הנדרשות של Credential Manager.
  • הפעלת Credential Manager: יוצרים מופע של Credential Manager.
  • שמירת סיסמה של משתמש: אחסון פרטי הכניסה של המשתמש בצורה מאובטחת.
  • כניסה באמצעות סיסמה: אחזור של פרטי הכניסה השמורים ושימוש בהם כדי להיכנס לחשבון.
  • זיהוי שדות שצריך להשתמש בהם במילוי אוטומטי: שימוש במילוי אוטומטי משפר את חוויית המשתמש.
  • הוספת תמיכה ב-Digital Asset Links: הוספת תמיכה בשיתוף סיסמאות בין אפליקציות ואתרים מקושרים.

הוספת יחסי תלות לאפליקציה

מוסיפים את יחסי התלות הבאים לקובץ 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.
    coroutineScope {
        try {
            val result =
                credentialManager.createCredential(
                    // Use an activity based context to avoid undefined
                    // system UI launching behavior.
                    activityContext,
                    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 בין האפליקציה לבין האתר. כך אפשר לשתף פרטי כניסה בצורה מאובטחת בשתי הפלטפורמות.