Udostępnianie użytkownikowi wskazówek dotyczących logowania

Żądania pobrania danych logowania użytkownika mogą się nie powieść, jeśli użytkownik nie został jeszcze zapisany dane logowania lub gdy użytkownik nie zarejestrował się jeszcze w aplikacji. W tych należy użyć interfejsu Credentials API do pobrania wskazówek logowania, takich jak nazwa i adres e-mail użytkownika. Skorzystaj z tych wskazówek, aby wstępnie wypełnić dane logowania w aplikacji i formularze rejestracyjne, co przyspieszy proces wdrażania aplikacji.

W Androidzie 6.0 (Marshmallow) lub nowszym aplikacja nie musi prosić o zgodę dowolne uprawnienia urządzenia lub działania w czasie działania, aby pobrać wskazówki logowania za pomocą Credentials API.

Zanim zaczniesz

Skonfiguruj projekt Android Studio.

Pobierz wskazówki dotyczące logowania

Aby pobrać wskazówki dotyczące logowania, najpierw skonfiguruj okno selektora podpowiedzi przez tworzenie HintRequest obiektu. Następnie przekaż obiekt HintRequest do CredentialsClient.getHintPickerIntent(). aby skłonić użytkownika do wybrania adresu e-mail. Na koniec uruchom z intencjami z 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);
}

Wybieranie podpowiedzi dotyczących logowania przy użyciu Smart Lock

Użytkownik zostanie poproszony o wybranie adresu e-mail.

Następnie w metodzie onActivityResult() aktywności pobierz wskazówki z metody Credential.EXTRA_KEY paczka, sprawdź, czy użytkownik jest w bazie danych użytkowników, i rozpocznij odpowiednie działanie z podpowiedzią na temat danych logowania.

@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();
        }
    }

    ...

}

Wstępnie wypełnij formularz logowania

Jeśli użytkownik znajduje się w bazie danych użytkowników i rozpoczęto logowanie w aplikacji aktywności, możesz (opcjonalnie) sprawdzić, czy obiekt Credential zawiera identyfikator token. Jeśli tak, możesz zalogować użytkownika za pomocą tokena identyfikatora, bez konieczności wpisywania hasła.

Jeśli obiekt Credential nie zawiera tokena identyfikatora (lub nie chcesz używać token identyfikatora), wypełnij pola logowania zgodnie ze wskazówkami dodanymi na stronie intencji.

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());

        ...
    }

    ...
}

Wypełnij wstępnie formularz rejestracji

Jeśli użytkownika nie ma w bazie danych użytkowników, a rejestracja aplikacji została rozpoczęta wypełnij pola rejestracji, korzystając z dodanych do nas wskazówek intencja.

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.

        ...
    }

    ...
}

Opcjonalnie możesz też sprawdzić, czy obiekt Credential zawiera Token identyfikatora, który ma zweryfikowany adres e-mail. Jeśli tak, możesz pominąć etap weryfikacji adresu e-mail w aplikacji. ponieważ adres został już zweryfikowany przez Google.