ユーザーがログイン、アカウントの作成、パスワードの変更を正常に行ったら、 認証情報を保存し、アプリでの今後の認証を自動化します。
始める前に
認証情報を保存する
ユーザーのログイン情報を含む 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();
次に、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 と双方向に共有されます)。