新しいデバイスのセットアップ時にアプリの認証情報を復元する

認証情報マネージャーの [認証情報を復元] 機能を使用すると、新しいデバイスのセットアップ時にアプリのアカウントを復元できます。この API はデベロッパー プレビュー版であり、Android 9 以降と Google Play 開発者サービス(GMS)Core バージョン 242200000 以降を搭載したすべてのデバイスで利用できます。認証情報の復元機能のメリットは次のとおりです。

  • シームレスなユーザー エクスペリエンス: ユーザーは、個々のアプリに手動でログインすることなく、アプリのアカウントを復元できます。
  • ユーザー エンゲージメントの向上: 新しいデバイスのセットアップ時にアカウントを復元できる場合、ユーザーはアプリを使い続ける可能性が高くなります。
  • 開発作業の削減: 認証情報の復元機能は認証情報マネージャーと統合されているため、パスキーをすでにサポートしているデベロッパーは、認証情報の復元機能を追加できます。

仕組み

Restore Credentials を使用して、関連する認証情報を作成、取得、クリアできます。

  1. 復元認証情報を作成する: ユーザーがアプリにログインしたときに、アカウントに関連付けられた復元認証情報を作成します。この認証情報はローカルに保存され、ユーザーが Google バックアップを有効にしていて、エンドツーエンドの暗号化が利用可能な場合はクラウドに同期されます(アプリはクラウドへの同期をオプトアウトできます)。
  2. 復元認証情報を取得する: ユーザーが新しいデバイスを設定するときに、アプリは認証情報マネージャーから復元認証情報をリクエストできます。これにより、追加の入力を必要とせずにユーザーを自動的にログインさせることができます。
  3. 復元認証情報をクリアする: ユーザーがアプリからログアウトしたときに、関連付けられた復元認証情報を削除する必要があります。

認証情報の復元機能は、すでにパスキーを実装しているバックエンド システムとスムーズに統合できます。この互換性は、パスキーと復元キー(認証情報の復元機能で使用される認証情報のタイプ)の両方が同じ基盤となる技術仕様に準拠していることに由来します。この調整により、パスキー対応システムに保存されたユーザー認証情報を復元プロセスで効果的に取得して復元できるようになり、さまざまなプラットフォームや認証方法で一貫性のある使いやすいエクスペリエンスが提供されます。

認証情報マネージャーのボトムシート
図 1. 復元認証情報を使用してアプリデータを新しいデバイスに復元する様子を示す図。認証情報の作成、復元フローの開始、ユーザーの自動ログインが含まれます。

実装

Restore Credentials API は、Credential Manager Jetpack ライブラリを通じて利用できます。バックアップの手順:

  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)
    

    生成されたこの復元認証情報は WebAuthn 認証情報の一種で、復元キーと呼ばれます。

  4. ユーザーが新しいデバイスを設定するときに、CredentialManager オブジェクトの getCredential() メソッドを呼び出します。

    // 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. ユーザーがアプリからログアウトしたら、CredentialManager オブジェクトの clearCredentialState() メソッドを呼び出します。

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

バックアップ エージェントを使用している場合は、onRestore コールバック内で getCredential 部分を実行します。これにより、アプリデータの復元直後にアプリの認証情報が復元されます。