Anfragen zum Abrufen von Nutzeranmeldedaten können fehlschlagen, wenn ein Nutzer noch keine Anmeldedaten gespeichert hat oder sich noch nicht bei Ihrer Anwendung registriert hat. Verwenden Sie in diesen Situationen die Credentials API, um Anmeldehinweise wie den Namen und die E-Mail-Adresse des Nutzers abzurufen. Verwenden Sie diese Hinweise, um die Anmeldeformulare Ihrer App vorab auszufüllen und so den Onboarding-Prozess Ihrer App zu beschleunigen.
Unter Android 6.0 (Marshmallow) und höher muss deine App keine Geräte- oder Laufzeitberechtigungen anfordern, um Anmeldehinweise mit der Credentials API abzurufen.
Hinweis
Android Studio-Projekt konfigurieren
Anmeldehinweise abrufen
Damit Sie die Anmeldehinweise abrufen können, müssen Sie zuerst das Dialogfeld zur Hinweisauswahl konfigurieren, indem Sie ein HintRequest
-Objekt erstellen. Übergeben Sie dann das Objekt HintRequest
an CredentialsClient.getHintPickerIntent()
, um einen Intent zu erhalten, der den Nutzer zur Auswahl einer E-Mail-Adresse auffordert. Zum Schluss starten Sie den Intent mit 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);
}
Der Nutzer wird aufgefordert, eine E-Mail-Adresse auszuwählen.
Rufen Sie dann in der Methode onActivityResult()
der Aktivität die Hinweise aus dem Paket Credential.EXTRA_KEY
ab, prüfen Sie, ob sich der Nutzer in der Nutzerdatenbank befindet, und starten Sie die entsprechende Aktivität mit dem Anmeldedatenhinweis.
@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(); } } ... }
Anmeldeformular vorausfüllen
Wenn sich der Nutzer in Ihrer Nutzerdatenbank befindet und Sie die Anmeldung Ihrer App gestartet haben, können Sie (optional) prüfen, ob das Objekt Credential
ein ID-Token enthält. In diesem Fall können Sie den Nutzer mit dem ID-Token anmelden, ohne dass der Nutzer ein Passwort eingeben muss.
Wenn das Credential
-Objekt kein ID-Token enthält oder Sie das ID-Token nicht verwenden möchten, füllen Sie die Anmeldefelder vorab mit den Hinweisen aus, die Sie dem Intent hinzugefügt haben.
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());
...
}
...
}
Anmeldeformular vorausfüllen
Wenn sich der Nutzer nicht in Ihrer Nutzerdatenbank befindet und Sie die Registrierungsaktivität Ihrer App gestartet haben, füllen Sie die Registrierungsfelder vorab mit den Anmeldehinweisen aus, die Sie dem Intent hinzugefügt haben.
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.
...
}
...
}
Optional können Sie auch prüfen, ob das Credential
-Objekt ein ID-Token mit einer bestätigten E-Mail-Adresse enthält. In diesem Fall können Sie den Schritt zur E-Mail-Bestätigung Ihrer Anwendung überspringen, da die E-Mail-Adresse bereits von Google verifiziert wurde.