ユーザーの認証情報を保存する

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

ユーザーがログイン、アカウントの作成、パスワードの変更を正常に行ったら、 認証情報を保存し、アプリでの今後の認証を自動化します。

始める前に

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

認証情報を保存する

ユーザーのログイン情報を含む Credential オブジェクトを作成します。対象 たとえば、ユーザーが Google アカウントを使ってログインした後、 確認します。

Credential credential = new Credential.Builder(email)
       
.setPassword(password)  // Important: only store passwords in this field.
                               
// Android autofill uses this value to complete
                               
// sign-in forms, so repurposing this field will
                               
// likely cause errors.
       
.build();

また、ユーザーが Google Chat で Google アカウントでログインする方法についての記事をご覧ください。

GoogleSignInAccount gsa = signInTask.getResult();
Credential credential = new Credential.Builder(gsa.getEmail())
       
.setAccountType(IdentityProviders.GOOGLE)
       
.setName(gsa.getDisplayName())
       
.setProfilePictureUri(gsa.getPhotoUrl())
       
.build();

[Smart Lock Save] ダイアログ

次に、CredentialsClient.save() を呼び出してユーザーの 認証情報を取得できます。CredentialsClient.save() の呼び出しがすぐに完了しない場合は、 認証情報が新規である可能性があり、その場合はユーザーが 保存します。ResolvableApiException を次のように解決します。 startResolutionForResult(): ユーザーに確認を求めるメッセージを表示します。

ユーザーが認証情報を保存しないことを選択した場合、 アプリで使用するアカウントの認証情報を保存する。電話 ユーザーがオプトアウトすると、CredentialsClient.save() の結果は次のようになります。 ステータス コード CANCELED。ユーザーは後で Google Chat の 設定アプリの [Smart Lock for Passwords] セクション。ユーザーが有効にする必要があります。 次回から認証情報の保存を求めるメッセージが表示されるように、すべてのアカウントの認証情報を保存する。

mCredentialsClient.save(credential).addOnCompleteListener(
       
new OnCompleteListener<Void>() {
           
@Override
           
public void onComplete(@NonNull Task<Void> task) {
               
if (task.isSuccessful()) {
                   
Log.d(TAG, "SAVE: OK");
                   
Toast.makeText(activity, "Credentials saved", Toast.LENGTH_SHORT).show();
                   
return;
               
}

               
Exception e = task.getException();
               
if (e instanceof ResolvableApiException) {
                   
// Try to resolve the save request. This will prompt the user if
                   
// the credential is new.
                   
ResolvableApiException rae = (ResolvableApiException) e;
                   
try {
                        rae
.startResolutionForResult(this, RC_SAVE);
                   
} catch (IntentSender.SendIntentException exception) {
                       
// Could not resolve the request
                       
Log.e(TAG, "Failed to send resolution.", exception);
                       
Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
                   
}
               
} else {
                   
// Request has no resolution
                   
Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
               
}
           
}
       
});</pre>

   
@Override
   
public void onActivityResult(int requestCode, int resultCode, Intent data) {
       
super.onActivityResult(requestCode, resultCode, data);

       
// ...

       
if (requestCode == RC_SAVE) {
           
if (resultCode == RESULT_OK) {
               
Log.d(TAG, "SAVE: OK");
               
Toast.makeText(this, "Credentials saved", Toast.LENGTH_SHORT).show();
           
} else {
               
Log.e(TAG, "SAVE: Canceled by user");
           
}
       
}

       
// ...

   
}

認証情報を保存したら、次を呼び出して認証情報を取得します。 CredentialsClient.request()

Android O 以降が対象

Android O を搭載するデバイスで Smart Lock を使用してパスワードの認証情報を保存する場合 以降、Smart Lock は、ネイティブの自動入力確認ダイアログを自身のメッセージよりも 使用することをおすすめします。(なお、認証情報は Google アカウントの Google は Smart Lock for Passwords と双方向に共有されます)。