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

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

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

仕組み

[認証情報の復元] を使用して、関連する認証情報を作成、取得、消去できます。

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

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

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

実装

Restore Credentials API は、認証情報マネージャー Jetpack ライブラリから使用できます。使用を開始するには、以下のステップを実行してください。

  1. プロジェクトに認証情報マネージャーの依存関係を追加します。

    // 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 = ...
    
    // 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. ユーザーがアプリからログアウトしたら、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 部分を実行します。これにより、アプリデータの復元後すぐにアプリの認証情報が復元されます。