사용자에게 로그인 힌트 제공

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

사용자가 아직 저장하지 않은 경우 사용자 인증 정보 검색 요청이 실패할 수 있습니다. 아직 가입하지 않은 사용자를 나타냅니다. 이러한 Credentials API를 사용하여 사용자 이름 및 이메일 주소입니다. 이 힌트를 사용하여 앱의 로그인 정보를 미리 입력하세요. 앱 온보딩 프로세스를 단축할 수 있습니다.

Android 6.0 (Marshmallow) 이상에서는 앱이 모든 기기 또는 런타임 권한을 사용하여 Credentials API를 사용할 수 있습니다.

시작하기 전에

Android 스튜디오 프로젝트를 구성합니다.

로그인 힌트 가져오기

로그인 힌트를 검색하려면 먼저 HintRequest 만들기 객체를 지정합니다. 그런 다음 HintRequest 객체를 CredentialsClient.getHintPickerIntent() 사용자에게 이메일 주소를 선택하라는 메시지를 표시하는 인텐트를 가져옵니다. 마지막으로 startIntentSenderForResult()를 사용하여 인텐트를 호출합니다.

HintRequest hintRequest = new HintRequest.Builder()
        .setHintPickerConfig(new CredentialPickerConfig.Builder()
                .setShowCancelButton(true)
                .build())
        .setEmailAddressIdentifierSupported(true)
        .setAccountTypes(IdentityProviders.GOOGLE)
        .build();

PendingIntent intent = mCredentialsClient.getHintPickerIntent(hintRequest);
try {
    startIntentSenderForResult(intent.getIntentSender(), RC_HINT, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
    Log.e(TAG, "Could not start hint picker Intent", e);
}

Smart Lock 로그인 힌트 선택기

사용할 이메일 주소를 선택하라는 메시지가 표시됩니다.

그런 다음 활동의 onActivityResult() 메서드에서 Credential.EXTRA_KEY parcel에서 사용자가 사용자 데이터베이스에 있는지 확인합니다. 자격 증명 힌트를 사용하여 적절한 활동을 시작합니다.

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

    if (requestCode == RC_HINT) {
        if (resultCode == RESULT_OK) {
            Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
            Intent intent;
            // Check for the user ID in your user database.
            if (userDatabaseContains(credential.getId())) {
                intent = new Intent(this, SignInActivity.class);
            } else {
                intent = new Intent(this, SignUpNewUserActivity.class);
            }
            intent.putExtra("com.mycompany.myapp.SIGNIN_HINTS", credential);
            startActivity(intent);
        } else {
            Log.e(TAG, "Hint Read: NOT OK");
            Toast.makeText(this, "Hint Read Failed", Toast.LENGTH_SHORT).show();
        }
    }

    ...

}

로그인 양식 미리 작성하기

사용자가 사용자 데이터베이스에 있고 앱의 로그인을 시작한 경우 선택적으로 Credential 객체에 ID가 포함되어 있는지 확인할 수 있습니다. 토큰입니다. 이 경우 ID 토큰으로 사용자를 로그인할 수 있습니다. 비밀번호를 입력하지 않아도 됩니다.

Credential 객체에 ID 토큰이 포함되어 있지 않거나 이 토큰을 사용하지 않으려는 경우 ID 토큰)에 추가한 힌트를 로그인 필드에 미리 채워 넣으세요. 인텐트를 지정할 수 있습니다.

public class SignInActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();
        Credential credential = intent.getParcelableExtra("com.mycompany.myapp.SIGNIN_HINTS");

        // Pre-fill ID field
        mUsernameView.setText(credential.getId());

        ...
    }

    ...
}

가입 양식 미리 작성하기

사용자가 사용자 데이터베이스에 없으며 앱 가입을 시작한 경우 활동에서 내가 추가한 로그인 힌트를 가입 필드에 미리 채워 넣으세요. 있습니다.

public class SignUpNewUserActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();
        Credential credential = intent.getParcelableExtra("com.mycompany.myapp.SIGNIN_HINTS");

        // Pre-fill sign-up fields
        mUsernameView.setText(credential.getId());
        mDisplaynameView.setText(credential.getName()); // Might be null.

        ...
    }

    ...
}

필요한 경우 Credential 객체에 ID 토큰 이메일 주소를 확인합니다. 이 경우 앱의 이메일 인증 단계를 건너뛰어도 됩니다. 이미 Google에서 이메일 주소를 인증했기 때문입니다.