Аутентификация с помощью паролей.

Хотя Credential Manager поддерживает вход в систему на основе паролей, мы настоятельно рекомендуем отдавать приоритет современным, более безопасным методам аутентификации, таким как ключи доступа и вход через Google . Эти методы обеспечивают значительно лучшую безопасность и удобство использования. Однако, если вашему приложению необходимо поддерживать пароли, используйте это руководство в качестве справочника для реализации паролей с помощью Credential Manager.

Менеджер учетных данных предоставляет унифицированный API для вашего приложения, позволяющий сохранять и получать учетные данные пользователей, включая имена пользователей и пароли. Это упрощает процесс входа в систему для пользователей и позволяет им беспрепятственно использовать поставщики учетных данных.

Предварительные требования

Реализация паролей в Credential Manager работает на устройствах под управлением Android 4.4 (уровень API 19) и выше.

Обзор

В этом руководстве рассматриваются изменения, необходимые в вашем приложении для создания, сохранения и входа в систему с помощью пароля.

  • Добавьте зависимости в ваше приложение : добавьте необходимые библиотеки диспетчера учетных данных.
  • Создание экземпляра диспетчера учетных данных : Создайте экземпляр диспетчера учетных данных.
  • Сохранение пароля пользователя : Надежное хранение учетных данных пользователя.
  • Вход с помощью пароля : Получение и использование сохраненных учетных данных для входа в систему.
  • Определите поля, для которых следует использовать автозаполнение : Используйте автозаполнение для улучшения пользовательского опыта.
  • Добавлена ​​поддержка ссылок на цифровые активы : добавлена ​​возможность обмена паролями между связанными приложениями и веб-сайтами.

Добавьте зависимости в ваше приложение.

Добавьте следующие зависимости в файл build.gradle вашего модуля приложения:

Котлин

dependencies {
    implementation("androidx.credentials:credentials:1.7.0-alpha02")
}

Круто

dependencies {
    implementation "androidx.credentials:credentials:1.7.0-alpha02"
}

Создать менеджер учетных данных

Используйте контекст вашего приложения или действия для создания объекта 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
}

Для обеспечения совместимости с менеджерами паролей необходимо настроить цифровые ссылки на активы между вашим приложением и веб-сайтом. Это позволит безопасно обмениваться учетными данными между обеими платформами.