Podaj użytkownikowi wskazówki dotyczące logowania

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Żądanie pobrania danych logowania może się nie powieść, gdy użytkownik nie zapisał jeszcze danych logowania lub nie zarejestrował się jeszcze w Twojej aplikacji. W takich przypadkach użyj interfejsu Credentials API, aby pobrać wskazówki logowania, takie jak nazwa i adres e-mail użytkownika. Dzięki tym wskazówkom możesz wstępnie wypełnić formularz rejestracji i rejestracji, co przyspieszy proces rejestracji.

Na urządzeniach z Androidem 6.0 (Marshmallow) i nowszym aplikacja nie wymaga uprawnień dotyczących urządzeń ani środowiska wykonawczego, aby pobrać wskazówki logowania za pomocą interfejsu Credentials API.

Zanim zaczniesz

Skonfiguruj projekt Android Studio.

Pobierz wskazówki logowania

Aby pobrać wskazówki dotyczące logowania, najpierw skonfiguruj okno wyboru podpowiedzi, tworząc obiekt HintRequest. Następnie prześlij obiekt HintRequest do CredentialsClient.getHintPickerIntent(), by uzyskać prośbę o wybranie adresu e-mail. Na koniec intencja zaczyna się od 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);
}

Selektor podpowiedzi logowania do Smart Lock

Pojawi się prośba o wybranie adresu e-mail.

Następnie w metodzie onActivityResult() działania pobierz wskazówki z paczki Credential.EXTRA_KEY, sprawdź, czy użytkownik znajduje się w bazie danych, i rozpocznij odpowiednie działanie za pomocą podpowiedzi dotyczącej 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ępne wypełnianie formularza logowania

Jeśli użytkownik jest w bazie danych i rozpoczęto aktywność logowania, możesz (opcjonalnie) sprawdzić, czy obiekt Credential zawiera token. Jeśli tak jest, 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 go używać), wypełnij pola logowania podpowiedziami dodanymi do 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());

        ...
    }

    ...
}

Wstępne wypełnianie formularza rejestracyjnego

Jeśli użytkownik nie znajduje się w bazie danych i rozpoczęto aktywność związaną z rejestracją w aplikacji, wypełnij pola rejestracji danymi logowania dodanymi do intencji.

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 tokena ze zweryfikowanym adresem e-mail. W takim przypadku możesz pominąć weryfikację adresu e-mail w aplikacji, ponieważ adres e-mail został już zweryfikowany przez Google.