Żądania pobrania danych logowania mogą zakończyć się niepowodzeniem, jeśli użytkownik nie zapisał jeszcze danych logowania lub nie zarejestrował się w aplikacji. W takiej sytuacji skorzystaj z interfejsu Credentials API, aby pobrać wskazówki dotyczące logowania, takie jak nazwa i adres e-mail użytkownika. Skorzystaj z tych wskazówek, aby wstępnie wypełnić formularze logowania i rejestracji w aplikacji, co przyspieszy proces wdrażania.
W Androidzie 6.0 (Marshmallow) i nowszych aplikacja nie musi prosić o uprawnienia urządzenia ani w czasie działania, aby pobierać wskazówki dotyczące logowania za pomocą interfejsu Credentials API.
Zanim zaczniesz
Skonfiguruj projekt Android Studio.
Odzyskaj wskazówki dotyczące logowania
Aby pobrać wskazówki dotyczące logowania, najpierw skonfiguruj okno selektora podpowiedzi, tworząc obiekt HintRequest
. Następnie przekaż obiekt HintRequest
do CredentialsClient.getHintPickerIntent()
, aby poprosić użytkownika o wybranie adresu e-mail. Na koniec rozpocznij intencję od elementu 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);
}
Pojawi się prośba o wybranie adresu e-mail.
Następnie za pomocą metody onActivityResult()
aktywności pobierz wskazówki z pakietu Credential.EXTRA_KEY
, sprawdź, czy użytkownik znajduje się w Twojej bazie danych użytkowników, i rozpocznij odpowiednie działanie przy użyciu podpowiedzi z danymi 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łnienie formularza logowania
Jeśli użytkownik znajduje się w bazie danych użytkownika i rozpoczęto proces logowania się w aplikacji, możesz (opcjonalnie) sprawdzić, czy obiekt Credential
zawiera token identyfikatora. Jeśli tak, możesz zalogować użytkownika za pomocą tokena identyfikatora, nie wymagając od niego wpisywania hasła.
Jeśli obiekt Credential
nie zawiera tokena identyfikatora (lub nie chcesz go używać), wypełnij wstępnie pola logowania wskazówkami 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łnienie formularza rejestracyjnego
Jeśli użytkownika nie ma w bazie danych użytkowników, a rozpoczęto proces rejestracji w aplikacji, wypełnij wstępnie pola rejestracji podanymi w intencji wskazówkami dotyczącymi logowania.
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 ze zweryfikowanym adresem e-mail. Jeśli tak, możesz pominąć etap potwierdzania adresu e-mail w aplikacji, ponieważ ten adres został już zweryfikowany przez Google.