恢复凭据

借助 Credential Manager 的恢复凭据功能,用户可恢复 应用账号。此 API 目前为开发者预览版, 适用于搭载 Android 9 或更高版本和 Google Play 服务的所有设备 (GMS) Core 版本 242200000 或更高版本。恢复凭据的优势 功能包括:

  • 顺畅的用户体验:用户无需手动登录每个应用,即可恢复其应用账号。
  • 提高用户互动度:如果用户可以在设置新设备时恢复其账号,则更有可能继续使用您的应用。
  • 减少开发工作:集成了“恢复凭据”功能 因此,已经支持通行密钥的开发者可以 凭据恢复功能。

工作原理

您可以使用“恢复凭据”来创建、获取和清除 凭据。

  1. 创建恢复凭据:当用户登录您的应用时,创建 与其账号关联的恢复凭据。此凭据已存储 如果用户启用了 Google 备份并 提供端到端加密功能(应用可以选择停用同步到云端的功能)
  2. 获取恢复凭据:当用户设置新设备时,您的应用 可以从 Credential Manager 请求恢复凭据。这样,您就可以 让用户自动登录,无需任何额外输入。
  3. 清除恢复凭据:当用户退出应用时,您 应删除关联的 Restore Credential。

“恢复凭据”功能可以与已实现通行密钥的后端系统顺畅集成。这种兼容性源于以下事实:通行密钥和恢复密钥(“恢复凭据”功能使用的凭据类型)都遵循相同的底层技术规范。这种一致性可确保“恢复凭据”流程能够有效检索和恢复存储在启用了通行密钥的系统中的用户凭据,从而在不同的平台和身份验证方法中提供一致且人性化的体验。

Credential Manager 底部动作条
图 1. 一张示意图,显示使用恢复凭据将应用数据恢复到新设备的过程,包括创建凭据、发起恢复流程和自动用户登录

实现

您可以通过 Credential Manager Jetpack 库使用 Restore Credentials API。如要开始使用,请按以下步骤操作:

  1. 将 Credential Manager 依赖项添加到您的项目中。

    // build.gradle.kts
    implementation("androidx.credentials:credentials:1.5.0-alpha03")
    
  2. 创建一个 CreateRestoreCredentialRequest 对象。

  3. CredentialManager 对象调用 createCredential() 方法。

    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)
    

    此生成的恢复凭据是一种通行密钥,也称为恢复通行密钥恢复密钥

  4. 当用户设置新设备时,对getCredential() CredentialManager 对象。

    // Fetch the Authentication JSON from server
    val authenticationJson = ...
    
    // Create the GetRestoreCredentialRequest object
    val options = GetRestoreCredentialOption(authenticationJson)
    val getRequest = GetCredentialRequest(Immutablelist.of(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 回调。这样可确保在应用数据恢复后立即恢复应用的凭据。