ユーザーに保存された認証情報を取得する

<ph type="x-smartling-placeholder">

Credentials API を使用してリクエストし、ユーザーをアプリに自動的にログインさせる 保存されているユーザーの認証情報を取得できます

始める前に

Android Studio プロジェクトを設定します

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();
       
// ...
   
}
}

保存された複数の認証情報を処理する

Smart Lock アカウント選択ツール

認証情報を選択するためにユーザー入力が必要な場合、request() タスクは ResolvableApiException で失敗します。以下を確認します。 getStatusCode()RESOLUTION_REQUIRED を返します。 例外の startResolutionForResult() メソッドを呼び出して、ユーザーにメッセージを表示する アカウントを選択します次に、ユーザーが選択した認証情報を アクティビティの onActivityResult() メソッド(Credential.EXTRA_KEYgetParcelableExtra() メソッドを呼び出します。

mCredentialsClient.request(request).addOnCompleteListener(
       
new OnCompleteListener
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、 必要に応じて、プロンプトを入力することにより、登録とログインのプロセスを迅速化できます。 メールアドレスやメールアドレス、パスワード、 その情報がフォームの一部のフィールドに自動入力されます。 ユーザーにログインのヒントを提供するをご覧ください。 をご覧ください。

ログインに成功したら、ユーザーが認証情報を保存できるようにする すべてのデバイスで今後の認証を自動化できます。