Восстановите учетные данные приложения при настройке нового устройства

Функция восстановления учётных данных Credential Manager позволяет пользователям восстанавливать учётные записи приложений при настройке нового устройства. Этот API находится в стадии предварительной версии для разработчиков и доступен на всех устройствах с Android 9 или более поздней версии и Google Play Services (GMS) Core версии 242200000 или выше. Преимущества функции восстановления учётных данных:

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

Как это работает

Вы можете использовать функцию восстановления учетных данных для создания, получения и удаления соответствующих учетных данных.

  1. Создайте учётные данные для восстановления : когда пользователь войдет в ваше приложение, создайте учётные данные для восстановления, связанные с его учётной записью. Эти данные хранятся локально и синхронизируются с облаком, если пользователь включил Google Backup и доступно сквозное шифрование (приложения могут отказаться от синхронизации с облаком).
  2. Получение учётных данных для восстановления : когда пользователь настраивает новое устройство, ваше приложение может запросить учётные данные для восстановления из диспетчера учётных данных. Это позволяет автоматически авторизовать пользователя без необходимости дополнительных действий.
  3. Очистите учетные данные восстановления : когда пользователь выходит из вашего приложения, вам следует удалить связанные учетные данные восстановления.

Функция восстановления учётных данных легко интегрируется с бэкэнд-системами, в которых уже реализованы ключи доступа. Эта совместимость обусловлена тем, что как ключи доступа, так и ключи восстановления (тип учётных данных, используемый функцией восстановления учётных данных) соответствуют одним и тем же базовым техническим спецификациям. Такое соответствие гарантирует, что процесс восстановления учётных данных сможет эффективно извлекать и восстанавливать учётные данные пользователей, хранящиеся в системах с ключами доступа, обеспечивая единообразный и удобный интерфейс на различных платформах и с различными методами аутентификации.

Нижний лист диспетчера учетных данных
Рисунок 1. Схема, иллюстрирующая восстановление данных приложения на новом устройстве с использованием учетных данных восстановления, включая создание учетных данных, запуск процесса восстановления и автоматический вход пользователя в систему.

Выполнение

API восстановления учётных данных доступен через библиотеку Credential Manager Jetpack. Чтобы начать работу, выполните следующие действия:

  1. Добавьте зависимость Credential Manager в свой проект.

    // build.gradle.kts
    implementation("androidx.credentials:credentials:1.5.0-alpha03")
    
  2. Создайте объект CreateRestoreCredentialRequest .

  3. Вызовите метод createCredential() для объекта CredentialManager .

    val credentialManager = CredentialManager.create(context)
    
    // On a successful authentication create a Restore Key
    // Pass in the context and CreateRestoreCredentialRequest object
    val response = credentialManager.createCredential(context, createRestoreRequest)
    

    Сгенерированные учетные данные восстановления являются типом учетных данных webauthn и называются ключом восстановления .

  4. Когда пользователь настраивает новое устройство, вызовите метод getCredential() для объекта CredentialManager .

    // Fetch the Authentication JSON from server
    val authenticationJson = fetchAuthenticationJson()
    
    // Create the GetRestoreCredentialRequest object
    val options = GetRestoreCredentialOption(authenticationJson)
    val getRequest = GetCredentialRequest(listOf(options))
    
    // The restore key can be fetched in two scenarios to
    // 1. On the first launch of app on the device, fetch the Restore Key
    // 2. In the onRestore callback (if the app implements the Backup Agent)
    val response = credentialManager.getCredential(context, getRequest)
    
  5. Когда пользователь выходит из вашего приложения, вызовите метод clearCredentialState() объекта CredentialManager .

    // Create a ClearCredentialStateRequest object
    val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL)
    
    // On user log-out, clear the restore key
    val response = credentialManager.clearCredentialState(clearRequest)
    

Если вы используете агент резервного копирования, выполните часть getCredential в обратном вызове onRestore . Это обеспечит немедленное восстановление учётных данных приложения после восстановления данных приложения.

Часто задаваемые вопросы

В1. В чем разница между ключом восстановления и ключом доступа?

Ключ восстановления работает аналогично ключу доступа, но специально разработан для восстановления учётной записи на новых устройствах. При использовании менеджера паролей, например, Google Password Manager, для аутентификации отображаются ваши доступные ключи доступа и пароли, а ключ восстановления — нет, поскольку он не предназначен для обычного входа.

В2. Является ли ключ восстановления одноразовым удостоверением?

Нет, ключ восстановления не является одноразовым. Диспетчер учётных данных не отслеживает состояние и не отслеживает действия пользователя, поэтому он не может автоматически удалить ключ после использования.

Ключи восстановления удаляются только в следующих ситуациях:

  • Действия на системном уровне : пользователи удаляют приложение или очищают его данные.
  • Вызовы на уровне приложения : вы программно удаляете ключ, вызывая CredentialManager#clearCredentialState() при обработке выхода пользователя из системы в коде вашего приложения.

В3. Функция восстановления учетных данных работает только на новом устройстве?

Да, эта функция предназначена для первоначальной настройки нового устройства на базе Android, поскольку она напрямую связана с функциями резервного копирования и восстановления системы.

В4. Могу ли я использовать функцию «Восстановление учётных данных» для скрытого входа пользователя на любое устройство, на котором выполнен вход в ту же учётную запись Google?

Нет, функция восстановления учётных данных не предназначена для общего входа на всех устройствах. Она работает только в одном конкретном сценарии: когда пользователь настраивает новое устройство, восстанавливая резервную копию со старого. Для успешного однократного восстановления оба устройства должны быть привязаны к одной учётной записи Google.

В5. В моей организации есть одно основное приложение и несколько дочерних. Можно ли восстановить ключевую работу для всех этих приложений?

Нет. Ключ восстановления привязан к уникальному имени пакета приложения. Поскольку у основного приложения и каждого дочернего приложения разные имена пакетов, вам необходимо создать отдельный ключ восстановления для каждого приложения.

В6. Требуется ли ключ доступа для создания ключа восстановления учетной записи пользователя?

Нет, ключ доступа не требуется. Возможность создания ключа восстановления не зависит от способа входа пользователя. Его цель — сохранить текущее состояние аутентификации пользователя. Пока пользователь находится в вашем приложении, вы можете сгенерировать для него ключ восстановления.

В7. Может ли пользователь удалить ключ восстановления?

Нет, пользователь не имеет прямого контроля над ключом восстановления. За управление ключами восстановления отвечает логика приложения.

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

В8. Могу ли я использовать функцию «Восстановление учётных данных», не устанавливая параметр allowBackup в значение true в манифесте?

Да, функция восстановления учетных данных работает независимо от того, установлено ли для параметра allowBackup значение true или нет.

В9. Как будет работать функция восстановления учётных данных для пользователей, у которых в одном приложении выполнен вход с нескольких учётных записей?

Функция восстановления учетных данных предназначена для работы только с одной учетной записью одновременно.