Nutzern Anmeldehinweise zur Verfügung stellen

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

Smart Lock-Auswahl für Anmeldehinweise

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.