Credentials API を使用してリクエストし、ユーザーをアプリに自動的にログインさせる 保存されているユーザーの認証情報を取得できます
始める前に
CredentialsClient オブジェクトを作成する
保存された認証情報をリクエストするには、
CredentialsClient: Credentials API にアクセスします。
CredentialsClient mCredentialsClient;
// ...
mCredentialsApiClient = Credentials.getClient(this);
CredentialRequest オブジェクトを作成する
CredentialRequest オブジェクトでは、
認証情報をリクエストするログイン システム。モデルを
setPasswordLoginSupported メソッドを使用して CredentialRequest
パスワード ベースのログイン、フェデレーション用 setAccountTypes() メソッドを使用すると、
Google ログインなどのログイン サービスからユーザーを保護します。
mCredentialRequest = new CredentialRequest.Builder()
    .setPasswordLoginSupported(true)
    .setAccountTypes(IdentityProviders.GOOGLE, IdentityProviders.TWITTER)
    .build();
IdentityProviders で定義されている定数を使用します。
よく使用するログイン プロバイダを指定します。その他のログイン プロバイダの場合は、
プロバイダを一意に識別する文字列。同じプロバイダ ID を使用する必要があります
認証情報を保存しておくことができます。
保存されている認証情報をリクエストする
CredentialsClient オブジェクトと CredentialRequest オブジェクトを作成したら、リクエスト オブジェクトを渡します。
CredentialsClient.request() 行き
メソッドを使用して、アプリ用に保存されている認証情報をリクエストします。
  mCredentialsClient.request(mCredentialRequest).addOnCompleteListener(
      new OnCompleteListener<CredentialRequestResponse>() {
          @Override
          public void onComplete(@NonNull Task<CredentialRequestResponse> task) {
              if (task.isSuccessful()) {
                  // See "Handle successful credential requests"
                  onCredentialRetrieved(task.getResult().getCredential());
                  return;
              }
              // See "Handle unsuccessful and incomplete credential requests"
              // ...
          }
      });
モジュールを使用して、成功したリクエストと失敗したリクエストを処理するコールバックを定義します。
addOnCompleteListener() メソッドを使用します。
成功した認証情報リクエストを処理する
 認証情報のリクエストが成功したら、結果として得られた
認証情報のリクエストが成功したら、結果として得られた
Credential
オブジェクトを使用して、アプリへのユーザーのログインを完了します。getAccountType() メソッドを使用する
取得した認証情報の種類を特定してから、適切な
プロセスですたとえば、Google ログインの場合は、サービス アカウントを表す GoogleSignInClient オブジェクトを作成します。
にユーザーの ID が含まれ、このオブジェクトを使用してログインフローを開始します。パスワード ベースの場合
認証情報オブジェクトから取得したユーザーの ID とパスワードを使用して、
ログイン プロセスを確認します。
private void onCredentialRetrieved(Credential credential) {
    String accountType = credential.getAccountType();
    if (accountType == null) {
        // Sign the user in with information from the Credential.
        signInWithPassword(credential.getId(), credential.getPassword());
    } else if (accountType.equals(IdentityProviders.GOOGLE)) {
        // The user has previously signed in with Google Sign-In. Silently
        // sign in the user with the same ID.
        // See https://developers.google.com/identity/sign-in/android/
        GoogleSignInOptions gso =
                new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .requestEmail()
                        .build();
        GoogleSignInClient signInClient = GoogleSignIn.getClient(this, gso);
        Task<GoogleSignInAccount> task = signInClient.silentSignIn();
        // ...
    }
}
保存された複数の認証情報を処理する

認証情報を選択するためにユーザー入力が必要な場合、request() タスクは
ResolvableApiException で失敗します。以下を確認します。
getStatusCode() は RESOLUTION_REQUIRED を返します。
例外の startResolutionForResult() メソッドを呼び出して、ユーザーにメッセージを表示する
アカウントを選択します次に、ユーザーが選択した認証情報を
アクティビティの onActivityResult() メソッド(Credential.EXTRA_KEY を
getParcelableExtra()
メソッドを呼び出します。
mCredentialsClient.request(request).addOnCompleteListener( new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { // ... return; } Exception e = task.getException(); if (e instanceof ResolvableApiException) { // This is most likely the case where the user has multiple saved // credentials and needs to pick one. This requires showing UI to // resolve the read request. ResolvableApiException rae = (ResolvableApiException) e; resolveResult(rae, RC_READ); } else if (e instanceof ApiException) { // The user must create an account or sign in manually. Log.e(TAG, "Unsuccessful credential request.", e); ApiException ae = (ApiException) e; int code = ae.getStatusCode(); // ... } } }); 
private void resolveResult(ResolvableApiException rae, int requestCode) {
    try {
        rae.startResolutionForResult(MainActivity.this, requestCode);
        mIsResolving = true;
    } catch (IntentSender.SendIntentException e) {
        Log.e(TAG, "Failed to send resolution.", e);
        hideProgress();
    }
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // ...
    if (requestCode == RC_READ) {
        if (resultCode == RESULT_OK) {
            Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
            onCredentialRetrieved(credential);
        } else {
            Log.e(TAG, "Credential Read: NOT OK");
            Toast.makeText(this, "Credential Read Failed", Toast.LENGTH_SHORT).show();
        }
    }
    // ...
}
保存された認証情報が見つからない場合は、ユーザーがアカウントを作成するか、手動で作成する必要がある
ログインします。getStatusCode() の場合
戻り値は SIGN_IN_REQUIRED、
必要に応じて、プロンプトを入力することにより、登録とログインのプロセスを迅速化できます。
メールアドレスやメールアドレス、パスワード、
その情報がフォームの一部のフィールドに自動入力されます。
ユーザーにログインのヒントを提供するをご覧ください。
をご覧ください。
ログインに成功したら、ユーザーが認証情報を保存できるようにする すべてのデバイスで今後の認証を自動化できます。