Android の統合フロー

Smart Lock for Passwords を Android アプリに統合するには、Credentials API の呼び出しをアプリの起動フローとログインフローに追加する必要があります。次の図は、Smart Lock for Passwords を使用する一般的な Android アプリのフローを示しています。

Smart Lock for Passwords を統合する方法は多数あり、統合の詳細はアプリの構造とユーザー エクスペリエンスによって異なりますが、ほとんどのアプリには以下のフローをおすすめします。このフローを使用するアプリには、次のようなユーザー エクスペリエンス上のメリットがあります。

  • サービスの既存の認証情報が 1 つ保存されているユーザーはすぐにログインし、アプリを開くと直接ログインビューに表示されます。
  • 複数の認証情報を保存しているユーザーや、自動ログインが無効になっているユーザーは、アプリのログインビューに移動する前に、1 つのダイアログのみに応答する必要があります。
  • 保存済みの認証情報がないユーザー、またはまだ登録していないユーザーは、1 回タップするだけで名前とメールアドレスを選択し、ログインビューまたは登録ビューのいずれかにインテリジェントに送信できます。この情報が事前に入力されています。
  • ユーザーがログアウトすると、アプリは自動的に再ログインしないようにします。

Smart Lock のログインフローの図

認証情報を取得する

  1. アプリの起動時にユーザーがまだログインしていない場合は、CredentialsClient.request() を呼び出します。
  2. Task が成功した場合は、getResult().getCredential() でユーザーの認証情報を取得し、それを使用してログインします。
  3. Task が失敗し、例外が ResolvableApiException のインスタンスであり、getStatusCode()RESOLUTION_REQUIRED を返した場合は、認証情報を選択するためにユーザー入力が必要です。startResolutionForResult() を呼び出して、保存済みアカウントを選択するようユーザーに求め、getParcelableExtra(Credential.EXTRA_KEY) を呼び出してユーザーの認証情報を取得し、それを使用してログインします。

認証情報を保存

  1. TaskApiException で失敗し、getStatusCode()SIGN_IN_REQUIRED を返した場合、ユーザーには保存済みの認証情報がないため、現在のログインフローまたは登録フローを使用してログインするか、手動で登録する必要があります。ユーザーがログインに成功したら、ユーザーが認証情報を取得できるように、後で取得できるようにできます(ステップ 5)。

    ユーザーのメールアドレスなどのログインヒントを取得することで、ユーザーがすばやく簡単にログインできるよう登録できます。ユーザーはヒントを選択し、認証情報の入力をスキップできます。アプリでユーザーのログインが求められる場合は、最初の認証情報リクエストが失敗するとすぐにヒントを取得することもできます(それ以外の場合は、ユーザーがログインまたは登録フローを開始するまで待ちます)。

    1. CredentialsClient.getHintPickerIntent() を呼び出し、インテントを選択してユーザーにアカウントの選択を促します。その後、getParcelableExtra(Credential.EXTRA_KEY) を呼び出してログインヒントを取得します。
    2. ヒントのユーザー ID が既存のユーザーと一致する場合は、それを使用してログイン フォームにパスワードを事前入力し、ユーザーはパスワードを入力してもらいます。
    3. ヒントのユーザー ID が既存のユーザーと一致しない場合は、登録フォームにユーザーの ID と名前を事前入力し、ユーザーが新しいアカウントを作成できるようにします。
  2. ユーザーがログインまたはアカウントを作成したら、CredentialsClient.save() でユーザー ID とパスワードを保存します。

    ユーザーが Google ログインなどのフェデレーション ID プロバイダを使用してログインした場合は、ユーザーのメールアドレスを ID として Credential オブジェクトを作成し、setAccountType で ID プロバイダを指定します。

ログアウト

  1. ユーザーがログアウトしたら、CredentialsClient.disableAutoSignIn() を呼び出して、ユーザーがすぐに再ログインできないようにします。また、自動ログインを無効にすると、ログイン情報を再入力しなくても、アカウントの切り替え(仕事用アカウントと個人用アカウント、共有デバイス上のアカウントなど)を簡単に行えます。

Smart Lock for Passwords をアプリに統合する準備はできましたか? 参加方法はこちらをご覧ください