사용자 인증 정보 저장

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

사용자가 로그인하거나 계정을 만들거나 비밀번호를 변경한 후 앱에서 향후 인증을 자동화하도록 사용자 인증 정보를 저장할 수 있습니다.

시작하기 전에

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() 호출이 즉시 처리되지 않은 경우 사용자 인증 정보가 새 인증일 수 있으며, 이 경우 사용자가 새 사용자 인증 정보를 확인해야 합니다. 저장합니다. 다음을 사용하여 ResolvableApiException를 해결합니다. startResolutionForResult(): 사용자에게 확인 요청 메시지를 표시합니다.

사용자가 사용자 인증 정보를 저장하지 않기로 선택하면 사용자에게 사용자 인증 정보를 저장하라는 메시지가 다시 표시되지 않습니다. 앱의 사용자 인증 정보를 저장합니다. 만약 사용자가 선택 해제하면 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과 양방향으로 공유됩니다.)