Nutzer mithilfe der Credentials API automatisch bei Ihrer App anmelden und gespeicherte Anmeldedaten für Ihre Nutzer abrufen.
Hinweis
Konfigurieren Sie ein Android Studio-Projekt.
CredentialsClient-Objekt erstellen
Um gespeicherte Anmeldedaten anzufordern, müssen Sie eine Instanz von
CredentialsClient
, um auf die Credentials API zuzugreifen:
CredentialsClient mCredentialsClient;
// ...
mCredentialsApiClient = Credentials.getClient(this);
CredentialRequest-Objekt erstellen
Ein CredentialRequest
-Objekt gibt die
Anmeldesystemen, von denen Sie Anmeldedaten anfordern möchten. Erstelle
CredentialRequest
mit der Methode setPasswordLoginSupported
für
passwortbasierte Anmeldung und die Methode setAccountTypes()
für föderierte
Anmeldedienste wie Google Log-in.
mCredentialRequest = new CredentialRequest.Builder()
.setPasswordLoginSupported(true)
.setAccountTypes(IdentityProviders.GOOGLE, IdentityProviders.TWITTER)
.build();
Die in IdentityProviders
definierten Konstanten verwenden
, um gängige Anmeldeanbieter anzugeben. Verwenden Sie für andere Anbieter für Anmeldungen eine beliebige
String, der den Anbieter eindeutig identifiziert. Sie müssen dieselbe Anbieter-ID verwenden
zum Speichern der Anmeldedaten, während Sie sie zum Abrufen der Anmeldedaten verwenden.
Gespeicherte Anmeldedaten anfordern
Nachdem Sie die Objekte CredentialsClient
und CredentialRequest
erstellt haben, übergeben Sie das Anfrageobjekt.
an die CredentialsClient.request()
, um für Ihre Anwendung gespeicherte Anmeldedaten anzufordern.
mCredentialsClient.request(mCredentialRequest).addOnCompleteListener(
new OnCompleteListener<CredentialRequestResponse>() {
@Override
public void onComplete(@NonNull Task<CredentialRequestResponse> task) {
if (task.isSuccessful()) {
// See "Handle successful credential requests"
onCredentialRetrieved(task.getResult().getCredential());
return;
}
// See "Handle unsuccessful and incomplete credential requests"
// ...
}
});
Definieren Sie einen Callback zur Verarbeitung erfolgreicher und fehlgeschlagener Anfragen mithilfe der
addOnCompleteListener()
-Methode.
Erfolgreiche Anmeldedatenanfragen verarbeiten
Bei einer erfolgreichen Anforderung von Anmeldedaten verwenden Sie das
Credential
um die Anmeldung des Nutzers in Ihrer App abzuschließen. Methode getAccountType()
verwenden
um den Typ der abgerufenen Anmeldedaten zu ermitteln, und führen Sie dann die entsprechenden Anmeldeinformationen aus.
. Erstellen Sie beispielsweise für Google Log-in ein GoogleSignInClient
-Objekt, das
die ID des Nutzers enthält, dann verwenden Sie das Objekt, um den Anmeldevorgang zu starten. Passwortbasiert
melden Sie sich an und verwenden Sie die ID und das Passwort des Nutzers aus dem Objekt „Anmeldedaten“, um den Vorgang abzuschließen.
zur Anmeldung.
private void onCredentialRetrieved(Credential credential) {
String accountType = credential.getAccountType();
if (accountType == null) {
// Sign the user in with information from the Credential.
signInWithPassword(credential.getId(), credential.getPassword());
} else if (accountType.equals(IdentityProviders.GOOGLE)) {
// The user has previously signed in with Google Sign-In. Silently
// sign in the user with the same ID.
// See https://developers.google.com/identity/sign-in/android/
GoogleSignInOptions gso =
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
GoogleSignInClient signInClient = GoogleSignIn.getClient(this, gso);
Task<GoogleSignInAccount> task = signInClient.silentSignIn();
// ...
}
}
Mehrere gespeicherte Anmeldedaten verarbeiten
Wenn Nutzereingaben zur Auswahl von Anmeldedaten erforderlich sind, wird mit der Aufgabe request()
Folgendes ausgeführt:
mit einem ResolvableApiException
fehl. Prüfen Sie, ob
getStatusCode()
gibt RESOLUTION_REQUIRED
und
die startResolutionForResult()
-Methode der Ausnahme aufrufen, um den Nutzer aufzufordern
um ein Konto auszuwählen. Rufen Sie dann die vom Nutzer ausgewählten Anmeldedaten
onActivityResult()
-Methode der Aktivität durch Übergeben von Credential.EXTRA_KEY
an den
getParcelableExtra()
.
mCredentialsClient.request(request).addOnCompleteListener( new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { // ... return; } Exception e = task.getException(); if (e instanceof ResolvableApiException) { // This is most likely the case where the user has multiple saved // credentials and needs to pick one. This requires showing UI to // resolve the read request. ResolvableApiException rae = (ResolvableApiException) e; resolveResult(rae, RC_READ); } else if (e instanceof ApiException) { // The user must create an account or sign in manually. Log.e(TAG, "Unsuccessful credential request.", e); ApiException ae = (ApiException) e; int code = ae.getStatusCode(); // ... } } });
private void resolveResult(ResolvableApiException rae, int requestCode) {
try {
rae.startResolutionForResult(MainActivity.this, requestCode);
mIsResolving = true;
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "Failed to send resolution.", e);
hideProgress();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// ...
if (requestCode == RC_READ) {
if (resultCode == RESULT_OK) {
Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
onCredentialRetrieved(credential);
} else {
Log.e(TAG, "Credential Read: NOT OK");
Toast.makeText(this, "Credential Read Failed", Toast.LENGTH_SHORT).show();
}
}
// ...
}
Wenn gespeicherte Anmeldedaten nicht gefunden werden, müssen Nutzer ein Konto erstellen oder manuell
melden Sie sich an. Wenn getStatusCode()
gibt SIGN_IN_REQUIRED
zurück,
können Sie optional die Anmelde- und Anmeldeprozesse beschleunigen, indem Sie
Nutzer kürzlich verwendete Anmeldeinformationen wie E-Mail-Adresse und
Namen hinzugefügt und einige Formularfelder automatisch mit diesen Informationen ausgefüllt.
Weitere Informationen finden Sie unter Nutzern Anmeldehinweise bereitstellen.
.
Nutzern nach erfolgreicher Anmeldung erlauben, ihre Anmeldedaten zu speichern um die zukünftige Authentifizierung auf allen ihren Geräten zu automatisieren.