사용자 인증 정보 저장

사용자가 로그인, 계정 생성 또는 비밀번호 변경에 성공한 후 앱에서 향후 인증을 자동화하도록 사용자 인증 정보를 저장하도록 허용합니다.

시작하기 전에

Android 스튜디오 프로젝트 구성

사용자 인증 정보 저장

사용자의 로그인 정보를 포함하는 Credential 객체를 만듭니다. 예를 들어 사용자가 비밀번호로 로그인한 후 사용자 인증 정보를 저장하도록 허용하는 방법은 다음과 같습니다.

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 계정으로 로그인한 후 다음을 실행합니다.

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

Smart Lock 저장 대화상자

그런 다음 CredentialsClient.save()를 호출하여 사용자의 사용자 인증 정보를 저장합니다. CredentialsClient.save() 호출이 즉시 성공하지 못하면 사용자 인증 정보가 새 사용자 인증 정보일 수 있으며, 이 경우 사용자는 저장 요청을 확인해야 합니다. startResolutionForResult()ResolvableApiException를 확인하여 사용자에게 확인 메시지를 표시합니다.

사용자가 사용자 인증 정보를 저장하지 않도록 선택하면 앱의 사용자 인증 정보를 저장하라는 메시지가 다시 표시되지 않습니다. 사용자가 선택 해제한 후 CredentialsClient.save()를 호출하면 결과에 CANCELED의 상태 코드가 포함됩니다. 사용자는 나중에 Google 설정 앱의 비밀번호 대용 Smart Lock 섹션에서 이 옵션을 선택할 수 있습니다. 다음에 사용자 인증 정보를 저장하라는 메시지가 표시되면 모든 계정에 대해 사용자 인증 정보 저장을 사용 설정해야 합니다.

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 자동 완성을 사용하여 저장된 사용자 인증 정보는 비밀번호 대용 Smart Lock과 양방향으로 공유됩니다.